【问题标题】:How to tell when a UIView gains focus如何判断 UIView 何时获得焦点
【发布时间】:2011-04-29 07:44:47
【问题描述】:

在 iPhone 上,当视图成为焦点时,我们可以简单地使用(void) viewDidAppear:(BOOL)animated; 执行操作。在某些情况下,我们有一个模态视图,其顶部有另一个模态视图,在 iPhone 上,关闭最顶部的模态视图将触发较低模态视图的 viewDidAppear。

iPad 不是这种情况,因为视图保持“可见”,即使它位于另一个模态视图之后。当视图本身成为活动视图时,有什么方法可以从 UIViewController 中分辨出来?

【问题讨论】:

    标签: iphone ipad uiview uiviewcontroller


    【解决方案1】:

    尝试检查 [theUIView isFirstResponder] 的值 对于具有键盘等焦点的视图,它应该为 True。

    【讨论】:

    • 听起来很有可能,但这并不是真正会触发的事件。我们希望响应视图变为活动状态,而不是不断检查它是否处于活动状态。
    【解决方案2】:

    当模态视图控制器的视图消失时你不能使用吗? 当模态视图的控制器收到 viewWill/DidDissapear 时,您就知道原来的视图再次可见。

    编辑: 在模态视图控制器的 viewDidDissapear 中添加:

    [self.parentViewController viewDidAppear:animated];
    

    这将使 viewDidAppear 方法像在 iPhone 上一样被调用。

    您根本不需要设置 self.parentViewController,因为它在 presentModalViewController 方法(用于显示模态视图控制器的方法)中为您完成

    【讨论】:

    • 问题是我们必须在两个模态视图之间建立一个链接,并告诉一个告诉另一个执行操作,理想情况下我们希望第一个模态视图随时执行操作它变得活跃。
    • 在模态显示的视图控制器上,在覆盖 ViewDidDissapear:animated 方法中并输入[self.parentViewController viewDidAppear:animated];。这实际上意味着当第二个模式视图控制器消失并因此出现第一个视图控制器时,第一个视图控制器的 ViewDidAppear 会被消息/调用。因此,您只需将希望第一个视图控制器在其变为活动状态时执行的所有操作都放在 ViewDidAppear 中,就像您在 iPhone 上正常操作一样。
    • 这听起来会奏效。我们采用了稍微不同的方法,但如果我们想到它,我可能会这样做。
    猜你喜欢
    • 2021-03-04
    • 2012-01-11
    • 1970-01-01
    • 2020-01-08
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多