更改iOS 8中的UISearchBar取消button文本

我想更改从iOS的UISearchBar中取消button的“取消”的“完成”的文本。我正在使用UISearchController。 我已经尝试了iOS 6和iOS 7的不同方法,他们不工作。 有没有人做到这一点?

这将工作

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

Swift版本:

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

find了!。 在iOS 8中,取消button在“cancelButton”键下。 我使用UISearchBar委托searchBarTextDidBeginEditing进行更改。

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

这对我在ios8中工作,没有尝试在ios7中,但应该做的伎俩,谨防把这一行放在应用程序周期的早期(例如:appDelegate)

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

和ios9一样,你也可以使用

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

希望有所帮助;)

Swift 3.0:

在你的AppDelegate中添加这个:

 UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "my text" 
  for view in (UISearchBar.subviews[0]).subviews{ if let button = view as? UIButton{ button.setTitleColor(UIColor.whiteColor(), forState: .Normal) button.setTitle("Cancel", forState:.Normal) } } 

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

在Swift中:

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

基于Burhanuddin Sunelwala的答案。

我在使用UISearchController中的UISearchBar时遇到了麻烦。 第一次显示取消button时文字没有改变,但是第二次做了。

直到我看到@ polo987的答案。 以下是我所做的工作:

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

我已经添加titleLabel.font混合…

这直接进入我的ViewDidLoad(){

  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 

我知道这似乎有点不相关,但在我看来,这是比使用私人API更安全,比潜入未知观点更有效。 只有拥有自己的本地化引擎时,这个解决scheme才有意义,而且您希望Apple能够在整个应用程序中遵循您的机制。 基本上我的想法是通过改变NSUserDefaults中的“AppleLanguages”键来切换iOS SDK使用的语言来本地化button。 你可以去这里了解更多关于这是如何工作的信息。

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

无论手机上设置什么语言,都要使用英文本地化和法语后备代码。 这只在应用程序内生效。

Swift4中

更改标题:

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

换颜色:

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

这里是Swift解决scheme:

 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 } } }