SWRevealViewController는 스와이프 시 키보드를 닫습니다.
-
21-12-2019 - |
문제
나는 사용하고있다 SWRevealViewController 내 앱에 문제가 있습니다.장면에 텍스트 필드가 있는데 키보드가 열려 있을 때 왼쪽으로 스와이프하면 메뉴가 나타나지만 키보드가 사라지지는 않습니다.왼쪽 스와이프 시 키보드를 어떻게 닫나요?
나는 시도했다
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
-(void)dismissKeyboard
{
[self.textField resignFirstResponder];
}
하지만 작동하지 않습니다. 이미 RevealViewcontroller에 panGestureRecognizer를 사용하고 있기 때문이라고 생각합니다. [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
나도 사용하고 있어요 UITapGestureRecognizer
하지만 스와이프가 아닌 탭에서만 작동합니다.
해결책
앱 대리인의 대리자 메서드 중 하나를 사용해야 할 필요가 있다고 생각합니다. 위임 된 방법이 거기에 있지만
아래와 같이 뭔가가 필요합니다.제스처를 추가하지 마십시오
appDelegate
에서이 대리자를 사용하십시오
삭제 모든 매크로는 #if
로 시작하지 않습니다.
앱 위임자 가이 방법에 획득 한 획득
아래의 대리인 메소드 이하, SWRevealViewController
가 이동하거나 슬라이스 할 때마다 셀이 셀 수 있습니다.
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
{
// NSLog( @"%@: %@", NSStringFromSelector(_cmd), [self stringFromFrontViewPosition:position]);
if(position == FrontViewPositionRight) //check the where to move
{
UINavigationController *viewController = revealController.frontViewController;
if([viewController.visibleViewController isKindOfClass:[FrontViewController class]])
{
[(FrontViewController *)viewController.visibleViewController dismissKeyboard]; //where this is the method declared in the FrontViewController.h file
}
}
}
.
하나의 경고가 여전히 작동합니다. 이것이 도움이되기를 바랍니다 ...
FrontViewController.h
-(void)dismissKeyboard; //add this
.
FrontViewController.m
-(void)dismissKeyboard
{
if([self.textField isFirstResponder]) //check
[self.textField resignFirstResponder];
}
. 다른 팁
나는 같은 문제가 있었다.
나는 추가했다 self.revealController.delegate = self;
Front View로 사용한 View Controller에 연결하고 위임 메서드가 호출됩니다.
나는 사용했다 - (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position{}
대리자 방법과 내가 쓴 [textField endEditing:YES];
이 대리자 메서드에서.
또한 추가됨 <SWRevealViewControllerDelegate>
내 Front View인 ViewController.h에 추가합니다.
시도 :
SWREVEALVIEWCONTOLLER.M에 아래 코드를 추가하십시오 - (bool) _PangeStureShouldBegin
[self.view endediting : 예];
먼저 reigntoggle을 대체해야합니다. 다음과 같이 사용자 지정 방법으로 메서드를 참조하십시오.
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"reveal-icon.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(myMethod)];
self.navigationItem.leftBarButtonItem = barBtn;
.
및 귀하의 방법보다 :
-(void)myMethod{
[self.view endEditing:YES];
SWRevealViewController *reveal = self.revealViewController;
[reveal revealToggleAnimated:YES];
}
.
확실하게 작동합니다.
이
를 사용해보십시오[[[self revealViewController] view] endEditing:YES]
.
이 추가
- (void)revealController:(SWRevealViewController *)revealController didMoveToPosition:(FrontViewPosition)position
.
또는 귀하의 요구 사항에 따라 다른 델리게이트 방법.
Frontview의 현재 위치를 확인하고 키보드를 숨기는 코드를 숨기는 코드.
self.textField
가 현재 첫 번째 응답자 인 것입니까?UIGestureRecognizer
Delegate의 메서드 – gestureRecognizerShouldBegin:
분명히 해당 기능에서 예를 반환합니다.
아래 방법을 편집
swrevealviewContoller.m
(IBAction)revealToggle:(id)sender {
[self.view endEditing:YES];
[self revealToggleAnimated:YES];
}
.