Ich habe UISearchBar, und ich möchte einen anderen UIViewController anzeigen, wenn ich auf Search button von UISearchBar klicke. Ich verwende folgende Methode dafür:Angezeigte Animation von UIViewController, die von pushViewController aufgerufen wird, die zweimal angezeigt wird
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
UIViewController *add =
[storyboard instantiateViewControllerWithIdentifier:@"mainMenuViewController"];
[self.navigationController pushViewController:add animated:YES];
}
Problem ist, dass die erscheinen Animation des UIViewController zweimal aufgerufen wird. Ich sehe zweimal den Schieber des alten Controllers von rechts nach links.
Nun, wenn ich den gleichen Code verwenden, um neue Controller anzuzeigen, wenn auf einige reguläre UIButton geklickt wird, ist das Animationsproblem verschwunden. Es scheint also irgendwie mit UISearchBar verwandt zu sein.
Die Delegate-Methode von searchBarSearchButtonClicked wird nur einmal aufgerufen.
Der Code zum Reproduzieren des Problems ist sehr minimal, möglicherweise werde ich später ein Beispielprojekt Bit anhängen.
Aber die UIViewController mit Suchleiste sieht wie folgt aus:
- (void)viewDidLoad {
[super viewDidLoad];
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
searchBar.placeholder = NSLocalizedString(@"search a pub or a place", nil);
searchBar.delegate = self;
[self.navigationItem setTitleView:searchBar];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
DLog(@"Filter searchBarSearchButtonClicked");
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
UIViewController *add =
[storyboard instantiateViewControllerWithIdentifier:@"mainMenuViewController"];
[self.navigationController pushViewController:add animated:YES];
}
Problem ist sowohl auf iOS 8 und 9.
Edit:
ich hochgeladen Beispielprojekt here. Es ist sehr minimalistisch.
Edit2:
Wenn ich den Controller wie diese präsentieren, nicht durch Navigation-Controller, wird die Animation nur einmal angezeigt. (Es ist eine andere Animation - von unten nach oben war die vorherige von rechts nach links). Aber ich muss es über den Navigationscontroller tun. Das Problem scheint also mit UISearchBar Search clicked + Navigation Controller zu tun zu haben.
[self presentViewController:add
animated:YES
completion:nil];
Natürlich kann ich es auch so ohne Animation nennen:
[self.navigationController pushViewController:add animated:NO];
Aber was, wenn ich eine Animation wollen.
Edit3:
Ich habe versucht zweite Controller über segue angezeigt werden, aber es hat nicht geholfen.
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[self performSegueWithIdentifier:@"seg1" sender:self];
}
Edit4:
ich diesen Fehler an Apple gemeldet haben, weil ich diese erraten Fehler in UIKit sein muss. Wie auch immer, wenn jemand einen Workaround findet, wäre es gut.
Vielleicht wird etwas mit der Entlassung eines UISearchController verwechselt. Eine Sache, die Sie versuchen sollten, wäre, Ihren Button-Delegate-Code in eine Methode mit einer einfachen Signatur zu verschieben und sie dann mit 'self performSelector' aufzurufen. – danh
danke für die idee, ich habe es versucht, aber das problem ist immer noch da. – luky