我有一个奇怪的问题。
我有一个 UITableView
,顶部嵌入了 UISearchBar
。我已在 UITableViewController
的 viewDidLoad
中使用以下代码将“returnKeyType
”更改为“完成”而不是“搜索”:
[(UITextField *)self.timelineSearchBar setReturnKeyType: UIReturnKeyDone];
[(UITextField *)self.timelineSearchBar setEnablesReturnKeyAutomatically:NO];
该代码非常适合我的 iPhone 5s。但是,如果我插入 iPhone 4s(也运行 iOS 7),它就会在这两条线路上崩溃。我设置了一个异常断点,它引导我到了那个断点,而且确实如此,如果我注释掉这两个断点,它会再次在 4 上运行。
由于对开发相对较新,我如何才能理解/解决导致问题的原因?
我的 4s Storyboard 与 5 Storyboard 相同,并且此 TableView 和 SearchBar 都是在 Storyboard 中创建的。我已经检查过,两者都连接到相同的属性(timelineSearchBar)。
任何想法都会很棒。
最佳答案
如果 timelineSearchBar
确实是 UISearchBar
类型的属性,那么这些调用实际上在两种设备上都会失败。 UISearchBar
不继承自 UITextField
,因此不会实现您尝试调用的两个方法。您对 UITextField
的强制转换是不安全的,并且可能是错误的根源。
如果您确实想更改搜索栏的这些属性,您可以浏览 subview ,直到找到实际的 UITextField
,然后在其上设置属性。以下方法将从 subview 中查找文本字段:
-(UITextField*)findTextFieldInSubviewsRecursively:(UIView*)view
{
if([view isKindOfClass:[UITextField class]]){
return (UITextField*)view;
}
for (UIView *subView in view.subviews){
UITextField* field = [self findTextFieldInSubviewsRecursively:subView];
if(field != nil){
return field;
}
}
return nil;
}
然后你只需要设置你的值:
UITextField* searchBarTextField = [self findTextFieldInSubviewsRecursively:self.timelineSearchBar];
// Set your stuff on the text field
但是这种方法可能不推荐,甚至可能不起作用
关于ios - 将 UISearchBar returnKeyType 更改为 Done 在 iPhone 5 上有效,但在 iPhone 4s 上会使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989161/