gpt4 book ai didi

ios - 将 UISearchBar returnKeyType 更改为 Done 在 iPhone 5 上有效,但在 iPhone 4s 上会使应用程序崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:28 25 4
gpt4 key购买 nike

我有一个奇怪的问题。

我有一个 UITableView,顶部嵌入了一个 UISearchBar。我已经在 UITableViewControllerviewDidLoad 中使用以下代码将“returnKeyType”更改为“完成”而不是“搜索”:

[(UITextField *)self.timelineSearchBar setReturnKeyType: UIReturnKeyDone];
[(UITextField *)self.timelineSearchBar setEnablesReturnKeyAutomatically:NO];

该代码非常适合我的 iPhone 5s。但是,如果我插入我的 iPhone 4s(也运行 iOS 7),它会在这两条线上崩溃。我放置了一个异常断点,它引导我到那里,而且确实如此,如果我将这两个注释掉,它再次在 4s 上运行。

作为相对较新的开发人员,我该如何着手理解/修复导致这里问题的原因?

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com