2015-03-11 4 views
24

Ich möchte den Text aus Abbrechen, DONE des Inneren des UISearchBar in iOS Abbrechen-Taste ändern 8. Ich UISearchController verwende. Ich habe verschiedene Ansätze für iOS 6 und iOS 7 ausprobiert und sie funktionieren nicht. Hat jemand das getan?ändern UISearchBar Löschtaste Text in iOS 8

+0

möglich Duplikat [UISearchController ändern Schaltfläche 'Abbrechen' title] (http://stackoverflow.com/questions/28642807/uisearchcontroller-change-cancel-button -title) –

+0

Ich habe eine Antwort zu diesem Thema hier geschrieben: http://stackoverflow.com/questions/19206757/how-to-change-textcolor-of-cancel-button-of-uisearchbar-in-ios7. Verwenden Sie einfach die SHSearchBar Cocoapod, die nicht so ein Ärgernis ist wie die UISearchBar. – blackjacx

Antwort

13

es gefunden !. In iOS 8 befindet sich die Abbrechen-Schaltfläche unter der Taste "CancelButton". Ich habe den UISearchBar-Delegaten searchBarTextDidBeginEditing verwendet, um die Änderung vorzunehmen.

func searchBarTextDidBeginEditing(searchBar: UISearchBar) { 
    let uiButton = searchBar.valueForKey("cancelButton") as UIButton 
    uiButton.setTitle("Done", forState: UIControlState.Normal) 

} 
+4

Ich würde erwägen, den Knopftitel nicht innerhalb dieses Callbacks zu setzen. Es scheint ein bisschen seltsam und unnötig. Berücksichtigen Sie beim Einrichten der Ansicht diesen Wert. –

+1

100 mal besser als private '_cancelButtonText' – Leo

+0

@ SteffenD.Sommer Es war sinnvoll für mich, es in den Rückruf zu setzen, weil ich die Schaltfläche Abbrechen nicht zeigen, bis die UISearchBar im Fokus ist. – toddg

65

wird diese

arbeiten
[searchBar setValue:@"customString" forKey:@"_cancelButtonText"]; 

Swift Version:

searchBar.setValue("customString", forKey:"_cancelButtonText") 
+0

Haben Sie die Swift-Version? –

+0

@It_Does_Not_Matter Aktualisiert! –

+1

Sollte die akzeptierte Antwort sein. – Allen

5

In Swift:

searchBar.setValue("customString", forKey: "_cancelButtonText") 

Basierend auf Burhanuddin Sunelwala Antwort. Hier

+0

beste Lösung, danke – Jack

0

ist Swift Lösung:

for (view) in _searchController.searchBar.subviews { 
    for (subview) in view.subviews { 
     if (subview.isKindOfClass(UIButton.self)) { 
      let cancelButton = subview as! UIButton 
      cancelButton.setTitle("BlaBla", forState: .Normal) 
      break 
     } 
    } 
} 
10

Dieser arbeitete für mich in ios8, nicht in ios7 habe versucht, aber sollte es tun, passen diese Linie in den frühen Zeiten des App-Zyklus platzieren (zB: AppDelegate)

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:@"Annuler"]; 

und ab ios9 könnten Sie auch

[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTitle:@"Annuler"]; 

Ich hoffe, das hilft;)

+0

Bestätigt, dass iOS 11 funktioniert. – mxcl

3

Ich habe titleLabel.font zur Mischung hinzugefügt ...

Diese gerade in mein ViewDidLoad geht() {

 let searchFont = UIFont(name: "BrandonGrotesque-Medium", size: 12) 
     let textFieldSearchBar = self.searchBar.valueForKey("searchField") as! UITextField 
     textFieldSearchBar.font = searchFont 
     let cancelButton = searchBar.valueForKey("cancelButton") as! UIButton 
     cancelButton.setTitle("Done", forState: .Normal) 
     cancelButton.titleLabel!.font = searchFont 
+0

Ost oder West ... David ist am besten:) .... danke Buddy –

4

Ich hatte Schwierigkeiten, diese an die Arbeit für eine UISearchBar innerhalb eines UISearchControllers. Der Text änderte sich nicht beim ersten Mal, als die Abbrechen-Schaltfläche angezeigt wurde, aber das zweite Mal.

Das heißt, bis ich @ polo987 Antwort sah. Hier ist, was ich tat, ist:

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).title = "Done" 
2

Ich weiß, das ist ein bisschen irrelevant zu sein scheint, aber meiner Meinung nach ist dies sicherer als die Verwendung von privaten apis und effizienter als einen Tauchgang in die unbekannte Aussicht. Diese Lösung ist nur sinnvoll, wenn Sie über eine eigene Lokalisierungs-Engine verfügen und möchten, dass Apple Ihrem Mechanismus in der gesamten App folgt. Grundsätzlich meine Idee ist die Sprache das iOS SDK verwendet schalten Sie die Taste durch Änderung der „AppleLanguages“ Schlüssel in der NSUserDefaults zu lokalisieren. Sie können gehen here für weitere Informationen darüber, wie dies funktioniert.

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", @"fr", nil] forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

diesen Code Legen Sie die englische Lokalisierung und Französisch Rückfall unabhängig davon, welche Sprache am Telefon gesetzt zu verwenden. Dies wird nur innerhalb der App wirksam.

7
for view in (UISearchBar.subviews[0]).subviews{ 
      if let button = view as? UIButton{ 
      button.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
      button.setTitle("Cancel", forState:.Normal) 
      } 
    } 

Selbstauskunft [0]).Unteransichten enthalten UISearchBarBackground, UISearchBarTextField, UINavigationButto n, in dem UINavigationButton die Unterklasse von UIButton ist. Suchen Sie nach "UIButton", und ändern Sie die Eigenschaft von "UIButton".

+0

Bitte erklären, wie dieser Code funktioniert. –

+0

Bitte verwenden Sie den Link [Bearbeiten], um diese Informationen zu Ihrem Beitrag hinzuzufügen. Kommentare sind "Bürger zweiter Klasse" und können jederzeit gelöscht werden. –

+0

Diese Antwort hat fast für mich funktioniert - ich habe den Code in 'searchBarTextDidBeginEditing' gesetzt und den Titel der Schaltfläche richtig geändert. Es funktionierte nicht das erste Mal, wenn der "Cancel" -Button angezeigt wird - ich vermute, dass er ein paar Minuten später als der Aufruf für "searchBarTextDidBeginEditing" erstellt wird. Ich benutzte [diese Lösung] (http://stackoverflow.com/a/40257292/1540248) in meiner 'viewDidLoad' Methode - funktioniert wie ein Zauber! – MayaLekova

7

Swift 3.0:

In Ihrem AppDelegate hinzufügen:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "my text" 
1

In Swift4

ändern Titel:

(searchBar.value(forKey: "cancelButton") as! UIButton).setTitle("Done", for: .normal)

Farbe ändern:

(searchBar.value(forKey: "cancelButton") as! UIButton).setTitleColor(UIColor.blue, for: .normal)