iOS 7和iOS 6中的取消按钮

时间:2013-11-10 15:28:36

标签: ios ios6 ios7 uisearchbar

我一直在努力改变iOS7中的取消按钮上的文字。

在iOS6中我没有问题 - 文本已更改。但在iOS7中它没有任何效果,我坚持“取消”。

但最后我发现下面的代码更改了iOS7中的默认“取消”文本。

现在的问题是,在iOS6中运行时,应用程序在打开搜索栏时崩溃了。

有人知道为什么以及如何解决这个问题,以便在iOS7和iOS6上工作?  这是错误消息。

2013-11-10 16:58:38.048 Testapp [45017:907] - [__ NSCFConstantString setTitle:forState:]:无法识别的选择器发送到实例0x11dfc 2013-11-10 16:58:38.050 Testapp [45017:907] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFConstantString setTitle:forState:]:发送到无法识别的选择器实例0x11dfc'

和main.m

int retVal = UIApplicationMain(argc,argv,nil,nil);

得到一个主题1:信号SIGABRT

代码如下。

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
    self.searchDisplayController.searchBar.showsCancelButton = YES;
    UIButton *cancelButton;
    UIView *topView = self.searchDisplayController.searchBar.subviews[0];
    for (UIView *subView in topView.subviews) {
        if ([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]) {
            cancelButton = (UIButton*)subView;
        }
  }
    if (cancelButton) {
                [cancelButton setTitle:@"Testing" forState:UIControlStateNormal];
    }
}

1 个答案:

答案 0 :(得分:1)

在IOS7中,Apple将searchBar子视图包装到另一个视图中。 这是伪代码,你可以在两个IOS版本上改变标题:

if ( iosVersion < IOS7) {
    subViews = self.searchBar.subviews;
} else {
    subViews = [(self.searchBar.subviews[0]) subviews];
}

for (id view in subViews) {
    if ([view isKindOfClass:[UIButton class]]) {
        UIButton* cancelbutton = (UIButton* )view;
        [cancelbutton setTitle:@"NewTitle" forState:UIControlStateNormal];
        break;
    }
}