webentwicklung-frage-antwort-db.com.de

Die Schaltfläche "Abbrechen" wird in UISearchBar nicht angezeigt

Ich habe UICollectionView. Beim Klicken auf die Suchschaltfläche in UINavigationBar füge ich die UISearchController der searchbar als Titelansicht für UINavigationItem hinzu. Für das iPhone funktioniert es einwandfrei. Beim iPad wird die Schaltfläche cancel nicht angezeigt. Die Suchleiste allein nimmt die gesamte Breite ein.

enter image description here

Kann mir da jemand weiterhelfen? Danke im Voraus.

15
Sheik_101

iOS7 zeigt die Schaltfläche "Abbrechen" nicht an, wenn Sie einer Navigationsleiste hinzugefügt wird. Sie können die Suchleiste in eine andere Ansicht wie diese stellen.

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

Ich hatte das gleiche Problem, auf dem iPhone wurde der Suchabbruch gut angezeigt, auf dem iPad jedoch nicht.

Die Problemumgehung, die UISearchBar in eine andere UIView zu packen, hat für mich nicht gut funktioniert, 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 von Abbruch als UIBarButtonItem.

7
Tal Haham

Versuche dies. Fügen Sie ein Häkchen für die Schaltfläche zum Abbrechen von Shows hinzu. 

enter image description here

2
Kaey

Laut Apple-Dokumentation setShowsCancelButton

Abbrechen-Schaltflächen werden für Apps, die auf dem iPad ausgeführt werden, nicht angezeigt, auch wenn Sie Für den Parameter showsCancelButton auf JA setzen.

Ich bin mir nicht sicher, welche Alternative es gibt, aber das bietet uns Apple. 

 enter image description here

Schnelle Version: -

Ich habe die Methode @Nikita Khandelwal ausprobiert, passt aber immer noch nicht in die iPad-Ansicht. Hier ist der Swift-Code, der als korrigierte Antwort angegeben wurde: 

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

********* Aber es gibt noch eine andere Möglichkeit, den Abbrechen-Button richtig einzustellen und für die Ansicht passend zu machen: -

  1. Legen Sie die Suchleiste als Titelansicht der Navigationsleiste fest: -

    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. Ziehen Sie die Bar-Schaltfläche auf die rechte Seite des View-Controllers und benennen Sie sie mit "Abbrechen".

  3. Verbinden Sie dann diese Schaltfläche mit dieser Funktion: - 

    @IBAction func iPadCancelButton(sender: AnyObject) {
           UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
          self.dismissViewControllerAnimated(true, completion: nil)
    }
    
1
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)
        }
    }
1
Sagar Daundkar

Für iOS 13, das mit Xcode 11 erstellt wurde, muss der Anzeigewert auf der Abbrechen-Schaltfläche manuell festgelegt werden, abhängig davon, ob der Suchcontroller sichtbar ist

0
Nostradamus