在iOS 8中更改UISearchBar取消按钮文本

Wil*_*mer 37 uisearchbar ios ios8 uisearchcontroller

我想在iOS 8中的UISearchBar中的"取消"按钮的"取消"中更改文本.我正在使用UISearchController.我尝试过iOS 6和iOS 7的不同方法,但它们不起作用.有人这样做过吗?

Bur*_*ala 85

Objective-C的:

[searchBar setValue:@"customString" forKey:@"_cancelButtonText"];
Run Code Online (Sandbox Code Playgroud)

迅速:

searchBar.setValue("customString", forKey:"_cancelButtonText")
Run Code Online (Sandbox Code Playgroud)

  • 这在iOS 13中崩溃。`禁止访问UISearchBar的set_cancelButtonText:ivar。 (6认同)
  • 我认为这不是证据安全.如果Apple决定使用iOS更新更改按钮的`_cancelButtonText`键,则会导致运行时崩溃. (2认同)

pol*_*987 25

这在ios8中对我有用,没有在ios7中尝试,但是应该这样做,小心在应用周期的早期放置这一行(例如:appDelegate)

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:@"Annuler"];
Run Code Online (Sandbox Code Playgroud)

从ios9开始,你也可以使用

[[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTitle:@"Annuler"];
Run Code Online (Sandbox Code Playgroud)

Swift版本:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Annuler"
Run Code Online (Sandbox Code Playgroud)

希望有所帮助;)


Wil*_*mer 16

找到了!.在iOS 8中,取消按钮位于"cancelButton"键下.我使用UISearchBar委托searchBarTextDidBeginEditing进行更改.

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

}
Run Code Online (Sandbox Code Playgroud)

  • 我会考虑不在此回调中设置按钮标题.这似乎有点奇怪和不必要.设置视图时,请考虑设置此值. (4认同)
  • @Leo:`cancelButton`也是一个无证件的私人财产.没有下划线不会改变这一点. (3认同)

May*_*sam 13

Swift 3.0:

在你的AppDelegate中添加:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "my text"
Run Code Online (Sandbox Code Playgroud)


Don*_*nal 10

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

self.subviews [0]).子视图包含UISearchBarBackground,UISearchBarTextField,UINavigationButto n,其中UINavigationButton是UIButton.Check的子类,用于View作为UIButton,如果是,则更改UIButton的属性.


小智 8

对于 iOS 13 支持:

迅速:

    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Whatever"
Run Code Online (Sandbox Code Playgroud)

目标 C:

    [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:[NSArray arrayWithObject:[UISearchBar class]]] setTitle:@"Whatever"]
Run Code Online (Sandbox Code Playgroud)


Ale*_*iks 6

在Swift中:

searchBar.setValue("customString", forKey: "_cancelButtonText")
Run Code Online (Sandbox Code Playgroud)

基于Burhanuddin Sunelwala的回答.

  • 这是一个危险的解决方案。如果苹果更改了键名“ _cancelButtonText”,这将导致您的应用程序崩溃。 (2认同)

tod*_*ddg 5

我无法在UISearchController中为UISearchBar工作.第一次显示取消按钮时,文本没有改变,但第二次显示.

直到我看到@ polo987的答案.这就是我所做的工作:

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "Done"
Run Code Online (Sandbox Code Playgroud)


Akh*_*ent 5

Swift4中

更改标题:

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

换颜色:

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