ios - 如何知道第二个控制器是不是被解雇?

Posted

技术标签:

【中文标题】ios - 如何知道第二个控制器是不是被解雇?【英文标题】:ios - how to know if second controller is dismissed?ios - 如何知道第二个控制器是否被解雇? 【发布时间】:2021-05-25 02:13:03 【问题描述】:

如果第二个控制器被关闭,是否可以在第一个控制器中处理和触发某些功能?

这是我从第一个控制器打开第二个控制器的代码

self.present(UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LockScreen") as UIViewController, animated: true, completion: nil)

这是我将控制器从第二个控制器解散到第一个控制器的代码

self.navigationController?.popViewController(animated: true)

self.dismiss(animated: true, completion: nil)

【问题讨论】:

有几种方法可以做到这一点。例如:delegate,在dismiss(animate: completion:) 内完成...但是为什么你 popViewController 然后关闭而不是立即关闭导航? 这能回答你的问题吗? Detect when a presented view controller is dismissed @son 哦,好吧,我只是解雇。有什么例子可以处理吗? 检查我的答案。 @E-地方 【参考方案1】:

在您的 LockScreen 控制器中,声明一个闭包以在关闭时处理:

class LockScreen: UIViewController 
    var onDismissHandler: (() -> ())?
    
    func dismissController() 
        self.dismiss(animated: true, completion: onDismissHandler)
    

那么当你展示LockScreen:

func onPresent() 
    let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "LockScreen") as LockScreen
    controller.onDismissHandler =  [weak self] in
        // TODO: Do something when dismissed
    
    self.present(controller, animated: true, completion: nil)

【讨论】:

没什么大不了的兄弟:)【参考方案2】:

当第二个 viewController 被关闭时,在当前 viewController 的关闭时触发一些函数。

class ViewController: UIViewController 
override func viewDidLoad() 
    super.viewDidLoad()


@IBAction private func buttonClick(sender: UIButton) 
    let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SecondViewController")
    onDismiss()
    self.present(viewController, animated: false, completion: nil)

在关闭当前视图控制器时触发一些函数

func onDismiss() 
    self.dismiss(animated: false) 
        print("Dismissing current view controller")
    

【讨论】:

以上是关于ios - 如何知道第二个控制器是不是被解雇?的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能解雇第二个在第一个 vc 上模态呈现的第一个 vc

关闭通知,通知中心和控制中心

如何知道我之前在 iOS 中的标签栏视图控制器是哪个?

iOS 13 中第二个视图控制器的导航栏按钮对齐错误

如何在 iOS 中向 UIView 添加第二个 UITabBar(控制器?)

iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中更改为黑色?