[ios] UITableView의 배경을 터치하여 키보드 닫기
나는이 UITableView
와 함께 UITextField
세포로의. 의 배경을 UITableView
터치 하면 키보드를 닫고 싶습니다 . UIButton
의 크기를 만들고 UITableView
뒤에 배치 하여이 작업을 수행하려고 합니다 UITableView
. 유일한 문제는 UIButton
터치가 UITableView에있을 때도 모든 터치를 잡는 것입니다. 내가 뭘 잘못하고 있죠?
감사!
답변
이는 UITapGestureRecognizer 를 생성하여 쉽게 수행 할 수 있습니다. 객체 (기본적으로 단일 탭에서 “제스처”를 감지하므로 추가 사용자 정의가 필요하지 않음) 제스처가 때 대상 / 액션을 지정한 다음 제스처 인식기 객체를 연결하여 쉽게 수행 할 수 있습니다. 테이블보기에.
예 : 아마도 귀하의 viewDidLoad
방법에서 :
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
[self.tableView addGestureRecognizer:gestureRecognizer];
그리고 hideKeyboard
방법은 다음과 같습니다.
- (void) hideKeyboard {
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
...
...
}
UITextField
개체 내부를 터치 할 때 제스처가 실행되지 않습니다 . 그것은에 불구하고 해고 UITableView
배경, 바닥 글보기, 헤더보기에 UILabels
등 내부 세포
답변
UITapGestureRecognizer 솔루션은 다음을 설정하는 경우 테이블 셀 선택과 함께 작동합니다.
gestureRecognizer.cancelsTouchesInView = NO;
답변
이를 수행하는 가장 좋은 방법은 다음과 같습니다. 그냥 해
[self.view endEditing:YES];
또는
[[self.tableView superView] endEditing:YES];
답변
답변
UITableView
의 하위 클래스와 마찬가지로 UIScrollView
아래에서 하나의 대리자 메서드를 구현하면 매우 쉽고 빠른 솔루션이 제공됩니다. resignFirstResponder
뷰 계층 구조가 현재 응답자를 조사하고 현재 응답자를 찾고 응답자 상태를 사임하도록 요청하므로 개입 할 필요도 없습니다 .
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.view endEditing:YES];
}
그리고 UIScrollViewDelegate
헤더 파일 에 추가하는 것을 잊지 마십시오.
답변
먼저 scrollViewWillBeginDragging
다음 UIViewController
을 추가하여 들어보십시오 UIScrollViewDelegate
.
.h 파일에서 :
@interface MyViewController : UIViewController <UIScrollViewDelegate>
.m 파일에서 :
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView {
[self dismissKeyboard];
}
그런 다음 다른 상호 작용을 들어보십시오.
- (void)setupKeyboardDismissTaps {
UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeUpGestureRecognizer.cancelsTouchesInView = NO;
swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
[self.tableView addGestureRecognizer:swipeUpGestureRecognizer];
UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeDownGestureRecognizer.cancelsTouchesInView = NO;
swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
[self.tableView addGestureRecognizer:swipeDownGestureRecognizer];
UISwipeGestureRecognizer *swipeLeftGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeLeftGestureRecognizer.cancelsTouchesInView = NO;
swipeLeftGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.tableView addGestureRecognizer:swipeLeftGestureRecognizer];
UISwipeGestureRecognizer *swipeRightGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
swipeRightGestureRecognizer.cancelsTouchesInView = NO;
swipeRightGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
[self.tableView addGestureRecognizer:swipeRightGestureRecognizer];
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
tapGestureRecognizer.cancelsTouchesInView = NO;
[self.tableView addGestureRecognizer:tapGestureRecognizer];
}
그런 다음 구현하십시오 dismissKeyboard
.
- (void)dismissKeyboard {
NSLog(@"dismissKeyboard");
[yourTextFieldPointer resignFirstResponder];
}
나처럼 사용자 정의 테이블 셀 내부의 UITextField에 대한 키보드를 닫고 싶다면 :
- (void)dismissKeyboard {
NSLog(@"dismissKeyboard");
CustomCellClass *customCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
[customCell.textFieldInCell resignFirstResponder];
}
누구나 검색하는 데 도움이되기를 바랍니다!
답변
tableView.keyboardDismissMode = .onDrag