Wenn der UISearchBar von UISearchController über becomeFirstResponder der Fokus zugewiesen wird, erscheint die Tastatur nicht

Ich habe ziemlich viel Zeit damit verbracht, online zu suchen und mich mit anderen Entwicklern über dieses Problem zu unterhalten, ohne Erfolg. Das genaue Problem ist in diesem SO-Beitrag beschrieben Fokus auf der UISearchBar, aber die Tastatur wird nicht angezeigt), obwohl es viele Jahre alt ist.

Ich habe kürzlich die Verwendung des veralteten UISearchDisplayControllers und der veralteten UISearchBar in IB eingestellt und bin über den Code für iOS8 auf UISearchController umgestiegen.

Das Problem, das ich bekomme, ist, dass der Fokus korrekt zugewiesen wurde (das kann man daran erkennen, dass die Abbrechen-Schaltfläche nach dem Laden der Ansicht rechts von der Suchleiste animiert wird), die Tastatur jedoch nicht angezeigt wird.

Hier ist der Code, den ich habe.

.h

@property (nonatomic, strong) UISearchController *searchController;

.m

- (void)viewDidLoad {
    [super viewDidLoad];
    ...
    [self initializeSearchController];
    ....
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.searchController setActive:YES];
    [self.searchController.searchBar becomeFirstResponder];
}

- (void)initializeSearchController {
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.searchController.delegate = self;
    self.searchController.searchBar.delegate = self;
    [self.searchController.searchBar sizeToFit];

    [self.tableView setTableHeaderView:self.searchController.searchBar];
    self.definesPresentationContext = YES;
}

Die Dinge, die ich bisher ausprobiert habe.

Ich habe versucht, becomeFirstResponder mit einer Verzögerung von 0,2 Sekunden aufzurufen, wie in einem anderen SO-Beitrag vorgeschlagen.

Ich habe in viewDidAppear einen Haltepunkt festgelegt und überprüft, ob sowohl self.searchController als auch self.searchController.searchBar gültige Objekte sind.

Ich habe versucht, mich an das UISearchControllerDelegate anzupassen und den folgenden Codeausschnitt zu verwenden

Hier

- (void)didPresentSearchController:(UISearchController *)searchController {
    //no matter what code I put in here to be,comeFirstResponder, it doesn't
    //matter because this is never called, despite setting the     
    //self.searchController.delegate = self AND 
    //self.searchController.searchBar.delegate = self.
}

Ich habe in Storyboards von Grund auf eine neue Ansicht erstellt und stattdessen zu dieser Ansicht übergegangen, um sicherzustellen, dass ich keinen alten searchBar-Rest in meiner Ansicht hatte. Das hat auch nicht geklappt.

Ich habe dies nur auf einem realen Gerät (iPhone 6) getestet und es ist kein Simulatorproblem, wenn die Tastatur nicht angezeigt wird.

Ich habe keine Ideen mehr und ich habe jede Frage und Antwort im Zusammenhang mit dieser im Web gesehen. Nichts funktioniert.

Um noch einmal zu verdeutlichen, was los ist, wird die searchBar korrekterweise zur ersten Antwort. Die Abbrechen-Schaltfläche rechts davon animiert den Bildschirm, um dies zu beweisen, aber die Tastatur wird nicht angezeigt und der Cursor blinkt nicht in der searchBar.

Antworten auf die Frage(20)

Ihre Antwort auf die Frage