知是行的主意,行是知的功夫。这篇文章主要讲述Swift - 从AppDelegate向View Controller添加子视图相关的知识,希望能为你提供帮助。
我试图在当前显示的AppDelegate
上添加来自UIViewController
的子视图,我注意到如果UIViewController
在AppDelegate
添加子视图时显示警告消息,则子视图将添加到UIAlertController
而不是UIViewController
。什么是在UIViewController
上显示子视图的最佳方式,而不是当前UIViewController
可能显示的任何其他子视图?这是我目前的代码。
@objc func showStudentLeftTheTestAlert(notification: NSNotification) {
if let userInfo = notification.userInfo {
if let visibleVc = self.window?.visibleViewController {
// do some other stuff here
visibleVc.view.addSubview(StudentLeftTestAlertViewController.sharedInstance.view)
}
}
}
答案问题是,警报信息实际上是在你原来的
UIViewController
上以模态方式呈现的UIViewController
。如果你想要到达顶部的shown
视图控制器(而不是presented
),你可以将这个方法添加到你的AppDelegate
。如果您使用的是导航堆栈,它将返回根视图控制器或顶视图控制器。func getTopViewController() ->
UIViewController? {
let rootViewController = self.window?.rootViewControllerif let navigationController = rootViewController as? UINavigationController {
// get the top view controller from stack if needed
return navigationController.topViewController
} else {
return rootViewController
}
}
希望它能帮到你
另一答案如果您想要显示UIViewController,可以添加以下扩展名:
// MARK: UIApplication extension
extension UIApplication {
// Get top view controller
static var topViewController:UIViewController? {
get{
if var topController = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
return topController
}else{
return nil
}
}
}
}
和使用是这样的:
guard let vc = UIApplication.topViewController else { return }
【Swift - 从AppDelegate向View Controller添加子视图】其中vc是您的顶级控制器,可以是UINavigationController,UITabbarcontroller或您的自定义控制器,所有这些都取决于您的导航流程。
推荐阅读
- android BroadcastReceiver有时会在onReceive上抛出NullPointerException
- 使用flask-jwt-extended回调与flask-restful和create_app
- 将Angular App发布为facebook Instant Article
- Apple ITunes AppStore客户评论rss端点无法正常工作
- 如何测试和修复电子邮件欺骗/缺少SPF记录漏洞()
- 9个WordPress扫描程序来查找安全漏洞
- 如何在几分钟内找到域的子域()
- 如何在Python应用程序中查找安全漏洞()
- 如何测试DNS安全风险并修复以避免被黑客入侵()