2

只是对于初学者:我已经在听键盘会出现/消失/更改通知。他们没有开火。两者都没有出现/消失/改变。

当我将键盘向上推并在顶部推动一个也使键盘向上的控制器时(viewWillAppear 中的-[UITextView becomeFirstResponder]),不会触发任何键盘通知。这是有道理的,因为键盘在这个动画中实际上并没有移动,但在这种情况下它肯定是不可取的。

我将如何检测这种情况,和/或在未触发任何通知时如何获取键盘的当前位置?全局共享侦听器是一种选择,但如果可能的话,我更愿意避免这种情况。

4

1 回答 1

0

您需要找到 firstResponder,如果它是 UITextField 或 UITextView,则键盘已启动或移动。没有通知意味着它已经启动,所以它的旧框架(相对于窗口)仍然有效。不幸的是,没有简单的方法可以找到第一个响应者。我抓住了一些递归遍历所有当前视图的子视图的代码,寻找它。

编辑:

- (UIView *)findFirstResponder
{
    if (self.isFirstResponder) {
        return self;     
    }

    for (UIView *subView in self.subviews) {
        UIView *firstResponder = [subView findFirstResponder];
        if (firstResponder) return firstResponder;
    }
    return nil;
}
于 2012-08-03T18:21:48.917 回答