나는이 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
