Cocoa touch 我如何知道我的视图位于最前面/被覆盖?
我有一个具有某种内部处理的视图控制器,它只应该在视图控制器的视图位于最前面时运行。过去有一个方便的约定,即可以在Cocoa touch 我如何知道我的视图位于最前面/被覆盖?,cocoa-touch,uiviewcontroller,Cocoa Touch,Uiviewcontroller,我有一个具有某种内部处理的视图控制器,它只应该在视图控制器的视图位于最前面时运行。过去有一个方便的约定,即可以在viewdideappease(:)中启动这种处理,然后在viewdillesmove(:)中停止它 但是现在,视图也可以被另一个半透明视图控制器覆盖,在这种情况下,它仍然在屏幕上(viewwilldiscover(:)不被调用),但同时它不是最前面的 有没有一种简单、防弹的方法可以知道这种情况何时发生?换句话说,我希望像viewWillResignActive和viewWillBec
viewdideappease(:)
中启动这种处理,然后在viewdillesmove(:)
中停止它
但是现在,视图也可以被另一个半透明视图控制器覆盖,在这种情况下,它仍然在屏幕上(viewwilldiscover(:)
不被调用),但同时它不是最前面的
有没有一种简单、防弹的方法可以知道这种情况何时发生?换句话说,我希望像
viewWillResignActive
和viewWillBecomeActive这样的东西。无需重写presentViewController(uux0:animated:completion:)
之类的东西。最后,我使用了一个自定义的UINavigationController
子类,并捕获了演示和解聘方法:
protocol ViewActivityDelegate {
func viewWillBecomeCovered()
func viewDidBecomeCovered()
func viewWillBecomeRevealed()
func viewDidBecomeRevealed()
}
class CustomNavigationController: UINavigationController {
override func presentViewController(viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?) {
let delegate = topViewController as? ViewActivityDelegate
delegate?.viewWillBecomeCovered()
super.presentViewController(viewControllerToPresent, animated: flag) {
completion?()
delegate?.viewDidBecomeCovered()
}
}
override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) {
let delegate = topViewController as? ViewActivityDelegate
delegate?.viewWillBecomeRevealed()
super.dismissViewControllerAnimated(flag) {
completion?()
delegate?.viewDidBecomeRevealed()
}
}
}