UIViewController 的委托函数决定弹出
Posted
技术标签:
【中文标题】UIViewController 的委托函数决定弹出【英文标题】:UIViewController's delegate function which determines pop 【发布时间】:2018-05-14 12:34:03 【问题描述】:我在导航堆栈中有 3 个 ViewController,它们是 ViewControllerA、ViewControllerB 和 ViewControllerC。
当我从 ViewControllerB 按下返回按钮时,我到达 ViewControllerA。
我想检查我是如何到达 ViewControllerA 的,无论是通过弹回还是作为导航堆栈的 rootViewController。
【问题讨论】:
添加您尝试过的代码。这个问题包含的信息要少得多,任何人都可以帮助你。 你想做什么请说明 【参考方案1】:你可以给你的 backButton 一个 unwind 函数并在视图控制器中捕获它。
@IBAction func unwindToView(unwindSegue: UIStoryboardSegue)
if let XControllerView = unwindSegue.sourceViewController as? XController
print("Coming from XControllerView")
else if let YControllerView = unwindSegue.sourceViewController as? YController
print("Coming from YControllerView")
有关放松的更多信息:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621473-unwind
【讨论】:
【参考方案2】:制定协议:
protocol DismissProtocol
func dismissPresentedViewControllerComplete()
我们会让 viewControllerA 符合这个协议。
在 ViewControllerB 中创建一个 DismissProtocol 类型的属性。
class ViewControllerB: UIViewController
var delegate: DismissProtocol?
//............
当您展示 ViewControllerB 时,将 ViewControllerA 指定为委托。
class SecondController: UIViewController
var delegate: DismissProtocol?
重写 ViewControllerA 中的协议方法:
extension ViewControllerA: DismissProtocol
func dismissPresentedViewControllerComplete()
// Do what you want to do when you return from ViewControllerB
现在,在 ViewControllerB 的关闭完成中,执行这个覆盖方法:
self.dismiss(animated: false)
self.delegate?.dismissPresentedViewControllerComplete()
【讨论】:
以上是关于UIViewController 的委托函数决定弹出的主要内容,如果未能解决你的问题,请参考以下文章
当 UIViewController 回到顶部时,iOS 中是不是有委托函数来获得通知?
将另一个 UIViewController 的视图放在“主”UIViewController 中——委托方法