iOS7 gdy UIsearchbar dodany w UINavigationBar nie pokazuje przycisku Anuluj

Dodaję Pasek UISearchBar nad paskiem UINavigationBar i ustawiam pasek uisearchbar showsCancelButton tak, działa dobrze w iOS6, ale w iOS7 nie pokazuje przycisku Anuluj. Użyłem poniższego fragmentu kodu

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];
Author: JackYi, 2013-09-24

7 answers

Z jakiegoś powodu iOS7 nie wyświetla przycisku Anuluj po dodaniu do paska nawigacyjnego. Dzieje się tak również, jeśli spróbujesz ustawić go jako widok tytułowy navigationItem.

Możesz obejść ten problem, zawijając Pasek UISearchBar w innym interfejsie użytkownika. Oto jak to robię jako 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
Author: Rodskjegg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-27 14:24:16

Miałem podobny problem, na pasku wyszukiwania iPhone ' a z przyciskiem anuluj Pokaż dobrze, ale na iPadzie przycisk Anuluj nie był wyświetlany. Owijanie paska UIsearchBar do UIView jak @ Rodskjegg throw style problem. Na iPadzie UIsearchBar ustawiając go jako widok tytułowy navigationItem i dodaj UIBarButtonItem do setRighttBarButtonItem jako UIBarButtonSystemItemCancel.

    [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
Author: vcalfa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 10:12:17

Tak W iOS 7 Przycisk znajduje się na ekranie, ale jego tytuł może być niewidoczny Moim rozwiązaniem było ustawienie stylu Wyszukiwania na "minimalny" i wybranie koloru bar tint dla koloru tekstu "Anuluj" w IB

Tutaj wpisz opis obrazka

I wynik w symulatorze:

Tutaj wpisz opis obrazka

 4
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-03 08:10:44

Od iOS 7 możesz po prostu ustawić właściwość displaysSearchBarInNavigationBar na YES na UISearchDisplayController, aby automatycznie uzyskać UISearchbar w pasku nawigacyjnym.

 4
Author: kohaxun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-04 07:37:30

Wpadłem na ten sam problem, Oto moje rozwiązanie, mam nadzieję, że to pomoże.

Kilka dalszych wyjaśnień: Dowiedziałem się, że wysyłanie setShowsCancelButton:animated: do paska wyszukiwania, działa jak magia. Najczystszym sposobem dodania paska wyszukiwania do paska nawigacji jest self.navigationItem.titleView = self.searchBar; odpowiedni czas wywołania setShowsCancelButton:animated: jest w metodach searchBarTextDidBeginEditing: i searchBarTextDidEndEditing: delegate, więc pamiętaj, aby ustawić self jako delegat paska wyszukiwania.

- (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
Author: 廖維平,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-21 21:21:10

Miałem ten sam problem, na iPhonie wyszukiwanie było dobrze pokazane, ale na iPadzie nie.

Obejście zawijania paska UISearchBar w innym interfejsie nie działało dobrze dla mnie, ponieważ miał inny wygląd i niewłaściwą szerokość przy obracaniu.

Moje rozwiązanie to proste wyszukiwanie bez anulowania i dodaj anulowanie jako UIBarButtonItem.

 1
Author: Tal Haham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-08 07:12:02

Zaimplementuj delegat paska wyszukiwania i użyj tego:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsCancelButton = YES;
}
 0
Author: user3607589,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 13:50:14