webentwicklung-frage-antwort-db.com.de

iOS7, wenn in UINavigationBar hinzugefügte UIsearchbar nicht die Schaltfläche "Abbrechen" zeigt

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];
22
JackYi

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;
44
Rodskjegg

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];
    }
6
vcalfa

Seit iOS 7 können Sie einfach die Eigenschaft displaysSearchBarInNavigationBar in YES auf UISearchDisplayController setzen, um automatisch eine UISearchbar in der Navigationsleiste zu erhalten.

4
kohaxun

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

enter image description here

Und das Ergebnis in einem Simulator:

enter image description here

4
David

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];
}
3
廖維平

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. 

1
Tal Haham

Implementieren Sie den Suchleisten-Delegaten und verwenden Sie Folgendes:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsCancelButton = YES;
}
0
user3607589