首先得遵守UISearchBarDelegate代理协议;
然后实现- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
这个代理方法;
在代理方法中,加入以下代码:
searchBar.showsCancelButton = YES;
for (id cencelButton in [searchBar.subviews[0] subviews])
{
if([cencelButton isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)cencelButton;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
其中,searchBar.showsCancelButton = YES
是必须的,不然不能把英文的“cancel”改成中文的“取消”。
运行试试吧。
2016.07.01更新
在Stackoverflow找到一个更好的方法:
[searchBar setValue("取消", forKey: "_cancelButtonText")];
这种写法解决了上面那种写法在弹出取消按钮时不自然的问题。
iOS9以后可以这样写:
[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]].title = @"取消";
iOS8也可以这样写:
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:@"取消"];