如何从 appDelegate
推送 UIViewController
从 appDelegate
推送 UIViewController
可以采用以下步骤:
appDelegate.swift
文件中,使用 weak
关键字声明一个弱引用,指向即将被推送的 UIViewController
类型(例如:weak var targetViewController: UIViewController?
)。这将确保在控制器生命周期中,该引用保持弱引用,有助于避免循环引用问题。class AppDelegate: UIResponder, UIApplicationDelegate {
weak var targetViewController: UIViewController?
// ... 其他代码 ...
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
方法里,添加如下代码来启动推送: if let targetViewController = targetViewController {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
targetViewController.dismiss(animated: true, completion: nil)
}
}
这里的 DispatchQueue.main.asyncAfter
代码块会在 1 秒后执行 targetViewController.dismiss
方法,从而将推送的 UIViewController
关闭。
targetViewController
实现了 Dismissable
协议,这样当用户点击推送按钮时,UIViewController
将自动关闭。class MyViewController: UIViewController, Dismissable {
// ... 其他代码 ...
// 覆盖 `dismiss(animated:completion:)` 方法
func dismiss(animated flag: Bool, completion: ((Bool) -> Void)? = nil) -> Bool {
// ... 实现 dismiss 逻辑 ...
return true
}
}
现在,你已经拥有了一个从 appDelegate
推送 UIViewController
的功能。用户点击推送按钮时,UIViewController
将被关闭。
领取专属 10元无门槛券
手把手带您无忧上云