0

我一直在努力更改 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:signal 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];
    }
}
4

1 回答 1

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;
    }
}
于 2013-11-10T17:05:47.683 回答