2015-05-27 19 views
15

Mam . Po kliknięciu przycisku wyszukiwania w UINavigationBar dodam 's searchbar jako widok tytułowy dla UINavigationItem. Dla iPhone'a działa poprawnie. Dla iPada przycisk cancel nie jest wyświetlany. Sam pasek wyszukiwania zajmuje całą szerokość.Przycisk Anuluj nie jest wyświetlany w UISearchBar

enter image description here

Czy ktoś może mi pomóc w tej sprawie ?. Z góry dziękuję.

+0

Używasz różnych storyboardy lub XIb dla iPhone i iPad? –

+0

Nie. Nie używam scenorysów ani ksyw. –

+0

Spróbuj ustawić 'searchBar.showsCancelButton = YES;' –

Odpowiedz

17

iOS7 nie pokazuje przycisk Anuluj, kiedy dodany do nawigacji bar.You można umieścić searchbar w innym świetle takiego.

UISearchBar *searchBar = [UISearchBar new]; 
searchBar.showsCancelButton = YES; 
[searchBar sizeToFit]; 
UIView *viewForSearchBar = [[UIView alloc]initWithFrame:searchBar.bounds]; 
[viewForSearchBar addSubview:searchBar]; 
self.navigationItem.titleView = viewForSearchBar; 
+0

Dobry wybór z: http://stackoverflow.com/questions/18986407/ios7-when-uisearchbar-added-in-uinavigationbar-not-showing-cancel- button –

2

Spróbuj tego. Dodaj znacznik wyboru dla przycisku anulowania pokazu.

enter image description here

+0

OP o tym, że działa na iPhonie, ale nie na iPadzie. – Gerald

6

miałem ten sam problem, na iPhone poszukiwanie anulować Wykazano również, ale na iPadzie nie.

Obejście opakowania UISearchBar w innym UIView nie działa dobrze, ponieważ miał odmienny wygląd i nieprawidłową szerokość podczas obracania.

Moje rozwiązanie jest proste - użyj wyszukiwania BEZ anulowania i dodaj anuluj jako UIBarButtonItem.

+0

To wydaje mi się właściwą odpowiedzią. Przycisk anulowania nie jest obsługiwany na iPadzie, więc po prostu dodaj go ręcznie jako 'UIBarButtonItem'. –

0

wersja Swift: -

Próbowałem metody @Nikita Khandelwal, ale nadal nie pasuje do widoku iPad. Oto szybki kod, który został podany jako skorygowana odpowiedź: -

let searchBar: UISearchBar = UISearchBar() 
searchBar.showCancelButton = true 
searchBar.placeholder = "Search Your Job Title" 
searchBar.fitToSize() 
searchBar.delegate = self //do not need if you delegate searchBar 
let viewForSearchBar: UIView = UIView(frame: searchBar.bounds) 
viewForSearchBar.addSubview(searchBar) 
self.navigationItem.titleView = viewForSearchBar 

********* ale jest inny sposób ustawić przycisk Anuluj i prawidłowo dopasować do widzenia: -

  1. Ustaw pasek wyszukiwania jako nawigacji pasek tytułowy widzenia: -

    let searchBar: UISearchBar = UISearchBar() 
    searchBar.showCancelButton = true 
    searchBar.placeholder = "Search Your Job Title" 
    searchBar.delegate = self //do not need if you delegate searchBar 
    self.navigationItem.titleView = searchBar 
    
  2. Przeciągnij i upuść przycisk paska po prawej stronie nazwy widok kontroler & to jak Anuluj.

  3. Następnie podłącz ten przycisk do tej funkcji: -

    @IBAction func iPadCancelButton(sender: AnyObject) { 
         UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil) 
         self.dismissViewControllerAnimated(true, completion: nil) 
    } 
    
0
Added rightBarButtonItem with selector will work fine for me. And adding searchBar inside view before setting to navigation title view was not showing properly. 
Code:- 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.dismissView)) 
func dismissView() { 
     if self.controller?.navigationController?.popViewController(animated: true) == nil { 
      self.controller?.dismiss(animated: true, completion: nil) 
     } 
    } 
Powiązane problemy