iOS更改UISearchBar中取消按钮的标题

Dan*_*xox 8 uisearchbar ios

我希望在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也应该这样做.

  • 如果用户使用除英语之外的任何语言运行iOS,则无法使用此功能. (2认同)

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中这种工作正常,希望这对你有用.

输出是: -

在此输入图像描述

  • [[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class],nil] setTitle:@"YourNewTextHere"]; 只需使用iOS 7 (11认同)

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)


Mic*_*gar 8

为了使其在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)