如何判断UIView何时获得焦点

5
在iPhone上,我们可以简单地使用(void) viewDidAppear:(BOOL)animated;来执行当视图成为焦点时的操作。在某些事件中,我们有一个模态视图和另一个模态视图位于其顶部,在iPhone上,关闭最顶层的模态视图将会触发下面模态视图的viewDidAppear。
然而,在iPad上情况并非如此,即使它在另一个模态视图后面,该视图仍然保持“可见”。有没有办法从UIViewController内部判断视图本身何时成为活动视图?
2个回答

4

你不能仅仅使用模态视图控制器的视图消失时调用的方法吗? 当模态视图控制器接收到viewWill/DidDissappear时,你就知道原始视图再次可见了。

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

[self.parentViewController viewDidAppear:animated];

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

你不需要设置self.parentViewController,因为在presentModalViewController方法中已经为你完成了(这是你用来显示模态视图控制器的方法)。


问题在于我们随后必须在两个模式视图之间建立链接,并告诉一个模式视图在理想情况下何时激活另一个模式视图执行操作,而我们希望第一个模式视图在任何时候激活时都执行操作。 - mjdth
在模态呈现的视图控制器中,重写ViewDidDisappear:animated方法并放置[self.parentViewController viewDidAppear:animated];。那样的话,当第二个模态视图控制器消失时,就会有效地意味着第一个视图控制器的ViewDidAppear被调用,因此第一个视图控制器将出现。所以您只需像在iPhone上一样,在ViewDidAppear中放置所有希望第一个视图控制器在变为活动状态时执行的操作即可。 - Jonathan.
这听起来应该可行。我们采用了稍微不同的方法,但如果我们想到了这个方法,我可能会先尝试这样做。 - mjdth

1

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


1
听起来像是一个可能性,但这并不是真正触发的事件。我们希望在视图变为活动状态时做出响应,而不是不断地检查它是否处于活动状态。 - mjdth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接