在我的看法中,下列情况属于同一范畴:
我的视图控制器全屏呈现了另一个视图控制器,现在已被解除呈现
我的视图控制器呈现了另一个不全屏的视图控制器,现在已被解除呈现
我的视图控制器呈现了一个弹出窗口,现在已被解除呈现
我的视图控制器推入了另一个视图控制器,现在已被弹出
在每种情况下,我的视图控制器停止成为“前端”视图控制器,然后重新变为“前端”。我觉得iOS没有单独的“成为前端”事件发送到我的视图控制器,覆盖所有这些情况,这很奇怪。
我认为我可以分别处理上述每种情况,并且我认为这些都是我需要解决的所有情况,但生成的代码很混乱和分散:
viewDidAppear
检测推动的视图控制器的弹出和全屏呈现视图控制器的解除呈现弹出窗口代理消息检测弹出窗口的解除呈现
不确定是什么检测了非全屏呈现视图控制器的解除呈现
人们如何处理这个问题使其具有连续性和优雅性?
UIViewController
的becomeFirstResponder
和resignFirstResponder
时,取得了非常一致的结果。详情请见这里。但是对于子视图控制器,这种方法并不起作用。 - bteapotbecomeFirstResponder
时遇到了一些问题——当一个呈现的视图控制器被解除显示时,它似乎不会被调用到新的最前面。我认为这并不是很令人惊讶,因为它可能会触发可能会干扰的UI,但这意味着它不能用于此目的。 - adamz