Ich füge UISearchBar über UINavigationBar hinzu und setze UIsearchbar showsCancelButton YES. Funktioniert gut in iOS6, aber in iOS7 wird keine Abbrechen-Schaltfläche angezeigt . Ich habe unten Code-Snippet verwendet
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar addSubview:searchBar];
Aus irgendeinem Grund zeigt iOS7 die Schaltfläche "Abbrechen" nicht an, wenn eine Navigationsleiste hinzugefügt wird. Dies geschieht auch, wenn Sie versuchen, es als titleView eines navigationItem festzulegen.
Sie können dieses Problem umgehen, indem Sie die UISearchBar zuerst in eine andere UIView einbetten. So mache ich es als titleView:
UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;
Ich hatte ein ähnliches Problem, auf der iPhone-Suchleiste mit Abbrechen-Button gut dargestellt, auf dem iPad wurde der Abbrechen-Button jedoch nicht angezeigt. Die UIsearchBar in UIView wie @ Rodskjegg werfen, um ein Style-Problem zu lösen. Legen Sie UIsearchBar auf dem iPad als titleView eines navigationItem fest und fügen Sie UIBarButtonItem zu setRighttBarButtonItem als UIBarButtonSystemItemCancel hinzu.
[self.navigationItem setLeftBarButtonItem:Nil animated:YES];
self.navigationItem.titleView = self.searchBar;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];
[self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
}
else {
[self.navigationItem setRightBarButtonItem: nil animated:YES];
}
Seit iOS 7 können Sie einfach die Eigenschaft displaysSearchBarInNavigationBar
in YES
auf UISearchDisplayController
setzen, um automatisch eine UISearchbar
in der Navigationsleiste zu erhalten.
Ja. In iOS 7 befindet sich die Schaltfläche auf dem Bildschirm, der Titel könnte jedoch unsichtbar sein. Meine Lösung bestand darin, den Suchstil auf "Minimal" zu setzen und die Farbtonfarbe für "Abbrechen" in IB auszuwählen
Und das Ergebnis in einem Simulator:
Ich bin auf das gleiche Problem gestoßen, hier ist meine Lösung, hoffe das hilft.
Einige weitere Erklärungen: Ich habe herausgefunden, dass das Senden von setShowsCancelButton:animated:
an die searchBar einfach magisch funktioniert. Der einfachste Weg, um eine searchBar zur Navigationsleiste hinzuzufügen, ist self.navigationItem.titleView = self.searchBar;
. Der geeignete Zeitpunkt für den Aufruf von setShowsCancelButton:animated:
ist in den Delegat-Methoden searchBarTextDidBeginEditing:
und searchBarTextDidEndEditing:
. Denken Sie daran, self
als Delegaten von searchBar festzulegen.
- (void)viewDidLoad
{
self.navigationItem.titleView = self.searchBar;
}
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:YES animated:YES];
}
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:NO animated:YES];
}
Ich hatte das gleiche Problem, auf dem iPhone wurde der Suchabbruch gut angezeigt, auf dem iPad jedoch nicht.
Die Umgehung des Umwickelns der UISearchBar in ein anderes UIView funktionierte für mich nicht gut, da sie bei Rotation ein anderes Aussehen und eine falsche Breite hatte.
Meine Lösung ist eine einfache One-Use-Suche OHNE Abbruch und Hinzufügen als UIBarButtonItem.
Implementieren Sie den Suchleisten-Delegaten und verwenden Sie Folgendes:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
searchBar.showsCancelButton = YES;
}