UISearchController更改“取消”button标题

我们如何改变search控制器中取消button的标题?

在这里输入图像说明

你可以用search栏中的“取消”button,

for (UIView *view in searchBar.subviews) { for (id subview in view.subviews) { if ( [subview isKindOfClass:[UIButton class]] ) { [subview setEnabled:YES]; UIButton *cancelButton = (UIButton*)subview; [cancelButton setTitle:@"hi" forState:UIControlStateNormal]; NSLog(@"enableCancelButton"); return; } } } 

上面提供的解决scheme可能随新的iOS版本而改变。 这是一个更好的方法:

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

Burhanuddin Sunelwala答案的Swift相当于我!

 self.searchBar.setValue("custom string", forKey: "cancelButtonText") 

感谢Burhanuddin Sunelwala让我朝着正确的方向发展!

您应该使用UISearchBar的外观代理。 你可以在这里find一个例子 – 如何改变显示在UISearchBar + iPhone中的取消button的默认文本

 for (UIView *subView in SearchBar.subviews) { if ([subView isKindOfClass:[UIButton class]]) { UIButton *cancelButton = (UIButton*)subView; [cancelButton setTitle:@"TitleString" forState:UIControlStateNormal]; } 

迅捷版:

 for view:UIView in (searchView?.subviews)! { for subView:UIView in (view.subviews) { if ( subView is UIButton ) { let cancelBut = subView as! UIButton //do stuff with cancelButton here } } } 

值得注意的是,更改取消button标题的首选方法现在通过外观(从另一个问题得到的想法: https : //stackoverflow.com/a/34522163/511878 ):

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

你还需要在程序之前有searchBar setShowsCancelButton

 - (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { [theSearchBar setShowsCancelButton:YES animated:NO]; for (UIView *subView in theSearchBar.subviews){ if([subView isKindOfClass:[UIButton class]]){ [(UIButton*)subView setTitle:@"Done" forState:UIControlStateNormal]; } } } 

还要注意使用UIButton来避免Apple的问题!