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