我希望在iOS中更改取消按钮的标题.我之前一直在用这个:
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
self.searchDisplayController.searchBar.showsCancelButton = YES;
UIButton *cancelButton = nil;
for (UIView *subView in self.searchDisplayController.searchBar.subviews) {
if ([subView isKindOfClass:NSClassFromString(@"UIButton")]) {
cancelButton = (UIButton*)subView;
}
}
[cancelButton setTitle:@"Annuller" forState:UIControlStateNormal];
}
Run Code Online (Sandbox Code Playgroud)
但它似乎不适用于iOS7.有什么建议?
Guy*_*gus 12
您需要递归搜索按钮.这应该是一种自动防故障的方法:
- (void)viewDidLoad
{
[super viewDidLoad];
[self convertButtonTitle:@"Cancel" toTitle:@"Annuller" inView:self.searchBar];
}
- (void)convertButtonTitle:(NSString *)from toTitle:(NSString *)to inView:(UIView *)view
{
if ([view isKindOfClass:[UIButton class]])
{
UIButton *button = (UIButton *)view;
if ([[button titleForState:UIControlStateNormal] isEqualToString:from])
{
[button setTitle:to forState:UIControlStateNormal];
}
}
for (UIView *subview in view.subviews)
{
[self convertButtonTitle:from toTitle:to inView:subview];
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在iOS 7上测试了这个,但它也适用于iOS 6也应该这样做.
Nit*_*hel 10
只需为它执行此代码: -
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
/* when user start editing in serchbar this method will display cancel button and disable the autocorrection functionality */
srcbar.showsCancelButton = YES;
for (UIView *subView in searchBar.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
UIButton *cancelButton = (UIButton*)subView;
[cancelButton setTitle:@"hi" forState:UIControlStateNormal];
}
}
srcbar.autocorrectionType = UITextAutocorrectionTypeNo;
}
Run Code Online (Sandbox Code Playgroud)
不是在iOS7中测试,但在iOS6中这种工作正常,希望这对你有用.
输出是: -

nah*_*g89 10
这是我对ios6和ios7的解决方案
#define IS_IOS7 (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
self.searchDisplayController.searchBar.showsCancelButton = YES;
UISearchBar *searchBar = self.searchDisplayController.searchBar;
UIView *viewTop = IS_IOS7 ? searchBar.subviews[0] : searchBar;
NSString *classString = IS_IOS7 ? @"UINavigationButton" : @"UIButton";
for (UIView *subView in viewTop.subviews) {
if ([subView isKindOfClass:NSClassFromString(classString)]) {
UIButton *cancelButton = (UIButton*)subView;
[cancelButton setTitle:@"your title" forState:UIControlStateNormal];
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了使其在iOS7上运行,您必须在搜索栏的子视图中搜索:
//iOS 7 hack
searchBar.showsCancelButton = YES;
UIView* view=searchBar.subviews[0];
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
UIButton *cancelButton = (UIButton*)subView;
[cancelButton setTitle:@"Anuluj" forState:UIControlStateNormal];
}
}
Run Code Online (Sandbox Code Playgroud)