becomeFirstResponder 似乎仅第一次用于摇动手势

Posted

技术标签:

【中文标题】becomeFirstResponder 似乎仅第一次用于摇动手势【英文标题】:becomeFirstResponder seems to work only 1st time for shake gesture 【发布时间】:2009-08-15 15:07:13 【问题描述】:

我通过在 UIViewController 中执行此操作来使我的应用摇动手势兼容:

- (void)viewWillAppear:(BOOL)animated

    [self.view becomeFirstResponder];
    [super viewWillAppear:animated];

问题是,当我翻转到另一个视图时(我正在使用具有翻转视图和根视图控制器的“实用程序”模板来管理它们),当我回来时,摇动手势停止工作。

我看到调用了viewWillAppear 方法,但视图似乎没有第二次重新获得第一响应者状态。

【问题讨论】:

【参考方案1】:

谁知道 .. 你必须在viewDidAppear 中拨打becomeFirstResponder 而不是viewWillAppear

【讨论】:

我遇到了同样的问题!我想我在 App Dev 论坛之一上找到了答案。【参考方案2】:

是的,这证实了我......我试图将控制器设置为来自应用程序委托的 firstResponder。同时,我发现在策略方法中撒上这条日志语句对调试很有帮助。

NSLog(@"%s: I %s first responder! (%@)", __FUNCTION__, [self isFirstResponder] ? "am" : "am not", self);

另外,为了让我可以在任意时间触发它,我启用了“orientation”方法并把它放在那里。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
NSLog(@"%s: I %s first responder! (%@)", __FUNCTION__, [self isFirstResponder] ? "am" : "am not", self);
return YES;

【讨论】:

以上是关于becomeFirstResponder 似乎仅第一次用于摇动手势的主要内容,如果未能解决你的问题,请参考以下文章

SQL LEFT JOIN 仅第一行

仅第一个单词的大写首字母[重复]

SQL Left Join 仅第一个匹配项

becomeFirstResponder() 不起作用

应该总是在主线程上调用 becomeFirstResponder() 吗?

在 UITableViewController textfield.becomeFirstResponder() 中不滚动 tableview