[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];


답변

Storyboard에서도 수행 할 수 있습니다.
여기에 이미지 설명 입력


답변

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