UISearchBar becomeFirstResponder 返回 0,但对 UISearchBar 有有效引用

Posted

技术标签:

【中文标题】UISearchBar becomeFirstResponder 返回 0,但对 UISearchBar 有有效引用【英文标题】:UISearchBar becomeFirstResponder returns 0, but have valid reference to UISearchBar 【发布时间】:2012-06-13 15:06:43 【问题描述】:

我有一个带有 UISearchBar(和 SearchDisplayController)的 UIViewController 以及一个 UITableView。当导航到这个视图控制器时,我想自动聚焦在 UISearchBar 上(调出键盘并聚焦在搜索栏中的文本字段上)。一切都说要使用

[searchBar becomeFirstResponder]

(假设 searchBar 是 UISearchBar 的出口)

我把它放在 viewDidLoad 的末尾:

- (void)viewDidLoad

    [super viewDidLoad];

    BOOL did = [searchBar becomeFirstResponder];

    [searchBar setText:@"donkey"];

变量did 为0(并且没有发生焦点),但搜索栏的文本已成功更改为donkey

我做错了什么?

我正在使用带有 ARC 和最新 Xcode (4.3.2) 的 ios 5。

【问题讨论】:

BOOL 做了 =[self.searchDisplayController.searchBar becomeFirstResponder];并设置委托 设置委托是什么意思?我需要实现回调吗?尝试在 searchBarShouldBeginEditing: 中返回 YES,但这不起作用。不清楚我需要实施哪一个。谢谢 顺便说一句,UISearchBar 和 Search Display Controller 的委托都已设置为 UIViewController。 【参考方案1】:

搞定了。只需将其放入 viewDidAppear 而不是 viewDidLoad 或 viewWillAppear。

【讨论】:

【参考方案2】:

将您的代码添加到 -(void)viewDidAppear;

【讨论】:

【参考方案3】:

这对我有用:

[window makeKeyAndVisible]

【讨论】:

【参考方案4】:

我们必须确保在 mainThread 上执行 METHOD becomeFirstResponder 所以让它像:

[xxx performSelectorOnMainThread:@selector(becomeFirstResponder) withObject:nil waitUntilDone:NO];

【讨论】:

以上是关于UISearchBar becomeFirstResponder 返回 0,但对 UISearchBar 有有效引用的主要内容,如果未能解决你的问题,请参考以下文章

UISearchBar becomeFirstResponder 返回 0,但对 UISearchBar 有有效引用

搜索栏UISearchBar的使用

UISearchBar

iOS学习—— UISearchBar的使用

UISearchBar 和 resignFirstResponder

UISearchBar(搜索框)