Molte risposte interessanti. Vorrei compilare diversi approcci nella soluzione che ho ritenuto più adatta a uno scenario UITableView (è quello che uso di solito): quello che di solito vogliamo è fondamentalmente nascondere la tastiera in due scenari: toccando al di fuori degli elementi dell'interfaccia utente di testo, o scorrendo verso il basso / verso l'alto l'UITableView. Il primo scenario che possiamo aggiungere facilmente tramite TapGestureRecognizer e il secondo tramite il metodo UIScrollViewDelegate scrollViewWillBeginDragging :. Primo ordine del giorno, il metodo per nascondere la tastiera:
/**
* 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];
}
Questo metodo rassegna qualsiasi interfaccia utente textField delle sottoview all'interno della gerarchia della vista UITableView, quindi è più pratico che dimettersi da ogni singolo elemento in modo indipendente.
Successivamente ci occupiamo di chiudere tramite un gesto Tap esterno, con:
- (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];
}
L'impostazione di tapGestureRecognizer.cancelsTouchesInView su NO serve per evitare che il gestureRecognizer sovrascriva il normale funzionamento interno di UITableView (ad esempio, per non interferire con la selezione della cella).
Infine, per gestire l'occultamento della tastiera durante lo scorrimento su / giù di UITableView, dobbiamo implementare il metodo scrollViewWillBeginDragging: protocollo UIScrollViewDelegate, come:
file .h
@interface MyViewController : UIViewController <UIScrollViewDelegate>
file .m
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
Spero possa essere d'aiuto! =)