我一直在为 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/