Birçok ilginç cevap. Bir UITableView senaryosuna en uygun olduğunu düşündüğüm çözüme farklı yaklaşımlar derlemek istiyorum (bu genellikle kullandığımdır): Genelde istediğimiz şey temelde klavyeyi iki senaryoda gizlemektir: Metin UI öğelerinin dışına dokunmak, veya UITableView'da aşağı / yukarı kaydırılırken. İlk senaryo, bir TapGestureRecognizer aracılığıyla ve ikincisi UIScrollViewDelegate scrollViewWillBeginDragging: yöntemiyle kolayca ekleyebiliriz. İlk iş emri, klavyeyi gizleme yöntemi:
/**
* 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];
}
Bu yöntem, UITableView görünüm hiyerarşisindeki alt görünümlerin herhangi bir textField kullanıcı arabirimini terk eder, bu nedenle her bir öğeyi bağımsız olarak yeniden bırakmaktan daha pratiktir.
Daha sonra, aşağıdakileri içeren bir dış Dokunma hareketiyle işten çıkarmayla ilgileniyoruz:
- (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];
}
TapGestureRecognizer.cancelsTouchesInView ayarını HAYIR olarak ayarlamak, jestRecognizer'ın UITableView'ün normal iç işleyişini geçersiz kılmasını önlemektir (örneğin, hücre Seçimi ile karışmaması).
Son olarak, klavyeyi UITableView yukarı / aşağı kaydırırken gizlemeyi işlemek için, UIScrollViewDelegate protokolü scrollViewWillBeginDragging: yöntemini şu şekilde uygulamalıyız:
.h dosyası
@interface MyViewController : UIViewController <UIScrollViewDelegate>
.m dosyası
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
Umut ediyorum bu yardım eder! =)