Banyak jawaban menarik. Saya ingin menyusun pendekatan yang berbeda ke dalam solusi yang menurut saya paling sesuai dengan skenario UITableView (ini yang biasanya saya gunakan): Yang biasanya kami inginkan pada dasarnya adalah menyembunyikan keyboard pada dua skenario: saat mengetuk di luar elemen Text UI, atau saat menggulir ke bawah / atas UITableView. Skenario pertama kita dapat dengan mudah menambahkan melalui TapGestureRecognizer, dan yang kedua melalui metode UIScrollViewDelegate scrollViewWillBeginDragging :. Urutan bisnis pertama, metode untuk menyembunyikan keyboard:
/**
* 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];
}
Metode ini mengembalikan UI bidang teks apa pun dari sub-tampilan dalam hierarki tampilan UITableView, jadi lebih praktis daripada mengundurkan diri setiap elemen secara independen.
Selanjutnya kami akan menangani pembubaran melalui gerakan Tap di luar, dengan:
- (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];
}
Menyetel tapGestureRecognizer.cancelsTouchesInView ke NO adalah untuk menghindari gestureRecognizer menimpa cara kerja normal dalam UITableView (misalnya, tidak mengganggu Seleksi sel).
Terakhir, untuk menangani penyembunyian keyboard saat Menggulir ke atas / bawah UITableView, kita harus mengimplementasikan protokol UIScrollViewDelegate scrollViewWillBeginDragging: metode, sebagai:
file .h
@interface MyViewController : UIViewController <UIScrollViewDelegate>
file .m
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
Saya harap ini membantu! =)