Viele interessante Antworten. Ich möchte verschiedene Ansätze in die Lösung einbauen, die meiner Meinung nach am besten zu einem UITableView-Szenario passt (es ist das, das ich normalerweise verwende): Normalerweise möchten wir die Tastatur in zwei Szenarien ausblenden: beim Tippen außerhalb der Text-UI-Elemente, oder beim Scrollen nach unten / oben in der UITableView. Das erste Szenario können wir einfach über einen TapGestureRecognizer und das zweite über die UIScrollViewDelegate scrollViewWillBeginDragging: -Methode hinzufügen. Erste Aufgabe, die Methode zum Ausblenden der Tastatur:
/**
* 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];
}
Diese Methode gibt alle textField-Benutzeroberflächen der Unteransichten innerhalb der UITableView-Ansichtshierarchie zurück. Daher ist es praktischer, als jedes einzelne Element unabhängig zurückzulegen.
Als nächstes kümmern wir uns um die Entlassung über eine externe Tap-Geste mit:
- (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];
}
Wenn Sie tapGestureRecognizer.cancelsTouchesInView auf NO setzen, wird verhindert, dass der gestureRecognizer das normale Innenleben von UITableView überschreibt (z. B. um die Zellenauswahl nicht zu beeinträchtigen).
Um das Ausblenden der Tastatur beim Scrollen nach oben / unten in der UITableView zu handhaben, müssen wir die UIScrollViewDelegate-Protokoll-Methode scrollViewWillBeginDragging: wie folgt implementieren:
.h Datei
@interface MyViewController : UIViewController <UIScrollViewDelegate>
.m Datei
#pragma mark - UIScrollViewDelegate
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self hideKeyboard];
}
Ich hoffe, es hilft! =)