ios - iOS 7 和 iOS 6 中的取消按钮

标签 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: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];
    }
}

最佳答案

在 IOS7 中,Apple 将 searchBar subview 包装到一个附加 View 中。 以下是如何在两个 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;
    }
}

关于ios - iOS 7 和 iOS 6 中的取消按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891510/

相关文章:

objective-c - sqlite3 没有链接到我的 IOS 项目

ios - NSPrintInfo localizedPaperName,如何在ios中获取纸张名称?

ios - 加载时尚未注册的值

XCode 5 测试符号 "rT"是什么意思?

ios - 使用键值过滤NSarray

ios - 音频 CMSampleBuffer 格式

ios - 如何将可选的 NSData 转换为可选的 Bool

ios - 导航栏图像上的纵横比填充?

app-store - 尽早提交到App Store以支持iOS6和iPhone 5

ios - 在派生数据中找不到 .app 文件