Moc*_*cha 3 cocoa-touch uiviewcontroller uinavigationcontroller ios
我正在导航堆栈的深处弹出一个视图控制器.是否可以检测视图控制器是从推送还是弹出显示?
nav stack:
[A] -> [B] -> [C] -> [D] -> [E]
Run Code Online (Sandbox Code Playgroud)
[E]弹出[B]
nav stack:
[A] -> [B] // Possible to detect if B appears from a pop?
Run Code Online (Sandbox Code Playgroud)
在视图控制器B中,实现viewWillAppear
或viewDidAppear
.在那里,使用isMovingToParent
并isBeingPresented
查看它出现在什么条件下:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if !isBeingPresented && !isMovingToParent {
// this view controller is becoming visible because something that was covering it has been dismissed or popped
}
}
Run Code Online (Sandbox Code Playgroud)
以下是人们可能会发现的这些属性的更一般用法:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if isMovingToParent {
// this view controller is becoming visible because it was just push onto a navigation controller or some other container view controller
} else if isBeingPresented {
// this view controller is becoming visible because it is being presented from another view controller
} else if view.window == nil {
// this view controller is becoming visible for the first time as the window's root view controller
} else {
// this view controller is becoming visible because something that was covering it has been dismissed or popped
}
}
Run Code Online (Sandbox Code Playgroud)
上述逻辑不包括一种情况 - 当视图控制器首次显示为窗口时viewWillAppear
.如果你需要检查那个案子,我想viewDidAppear
会是,isMovingToParent
但我现在无法测试.
归档时间: |
|
查看次数: |
314 次 |
最近记录: |