Nhiều câu trả lời thú vị. Tôi muốn biên dịch các cách tiếp cận khác nhau thành giải pháp mà tôi nghĩ phù hợp nhất với kịch bản UITableView (đó là kịch bản tôi thường sử dụng): Điều chúng tôi thường muốn về cơ bản là ẩn bàn phím trong hai trường hợp: khi chạm vào bên ngoài các phần tử Giao diện người dùng văn bản, hoặc khi cuộn xuống / lên UITableView. Kịch bản đầu tiên chúng ta có thể dễ dàng thêm thông qua TapGestureRecognizer và kịch bản thứ hai thông qua phương thức UIScrollViewDelegate scrollViewWillBeginDragging:. Đơn hàng đầu tiên của doanh nghiệp, phương pháp ẩn bàn phím:
/**
* Shortcut for resigning all responders and pull-back the keyboard
*/
-(void)hideKeyboard
{
//this convenience method on UITableView sends a nested message to all subviews, and they resign responders if they have hold of the keyboard
[self.tableView endEditing:YES];
}
Phương pháp này từ chức bất kỳ giao diện người dùng textField nào của các chế độ xem phụ trong hệ thống phân cấp chế độ xem UITableView, vì vậy nó thực tế hơn là từ chức từng phần tử một cách độc lập.
Tiếp theo, chúng tôi xử lý loại bỏ thông qua cử chỉ Nhấn bên ngoài, với:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setupKeyboardDismissGestures];
}
- (void)setupKeyboardDismissGestures
{
// Example for a swipe gesture recognizer. it was not set-up since we use scrollViewDelegate for dissmin-on-swiping, but it could be useful to keep in mind for views that do not inherit from UIScrollView
// UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
// swipeUpGestureRecognizer.cancelsTouchesInView = NO;
// swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
// [self.tableView addGestureRecognizer:swipeUpGestureRecognizer];
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
//this prevents the gestureRecognizer to override other Taps, such as Cell Selection
tapGestureRecognizer.cancelsTouchesInView = NO;
[self.tableView addGestureRecognizer:tapGestureRecognizer];
}
Đặt tapGestureRecognizer.cancelsTouchesInView thành KHÔNG là để tránh cử chỉ ghi đè các hoạt động bình thường bên trong của UITableView (ví dụ: không can thiệp vào Lựa chọn ô).
Cuối cùng, để xử lý ẩn bàn phím trên Cuộn lên / xuống UITableView, chúng ta phải triển khai phương thức scrollViewWillBeginDragging: giao thức UIScrollViewDelegate, như:
tệp .h
@interface MyViewController : UIViewController <UIScrollViewDelegate>
tệp .m
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
Tôi hy vọng nó sẽ giúp! =)