swift - 视图控制器不会推送
问题描述
我的应用程序委托中有一个函数,它应该在从 Siri 快捷方式调用时推送视图控制器。
func pushNewView() {
if let wind = UIApplication.shared.delegate?.window {
if let rootViewController = wind?.rootViewController {
let viewToPush = TripTableViewController()
if let alreadySomeOneThere = rootViewController.presentedViewController {
alreadySomeOneThere.navigationController?.pushViewController(viewToPush, animated: true)
} else {
rootViewController.navigationController?.pushViewController(viewToPush, animated: true)
}
}
}
}
当我pushNewView()
从我的 AppDelegate 调用时,没有任何反应。
如果我呈现视图控制器而不是推送它,那确实有效,但我希望推送视图控制器。
我没有使用任何故事板,我所有的代码都是程序化的。
有谁知道如何使这个功能成功推送视图控制器?
解决方案
什么都没有发生,因为既没有alreadySomeOneThere
也没有rootViewController
嵌入到导航控制器中。
为了推送另一个视图控制器,需要有一个现有的导航控制器。
你需要做两件事之一。要么重做你的设置,将alreadySomeOneThere
和rootViewController
嵌入到导航控制器中,要么你需要从alreadySomeOneThere
或展示新的视图控制器rootViewController
。
请注意,您不能推送导航控制器。如果您选择将alreadySomeOneThere
androotViewController
放入导航控制器,则只需按下viewToPush
. 不要创建另一个导航控制器。
如果您决定从alreadySomeOneThere
或呈现新的视图控制器rootViewController
,那么根据 的需要viewToPush
,您可能需要也可能不需要viewToPush
嵌入它自己的导航控制器。
推荐阅读
- swift - 播放保存在文档目录中的视频
- wordpress - wp_redirect 在自定义插件中不起作用
- reactjs - 是否有使用一个代码库开发 Web 和移动应用程序的框架?
- php - HTTP_X_FORWARDED_FOR 显示 ipv6 和 ipv4
- python - 遍历读取前 N 个值的文件
- vue.js - Vuex 存储数据总是驻留在内存中?
- python - 使用 tf.Dataset 训练的模型进行推理
- java - 使用 Scroll 从 Elasticsearch 检索大型结果需要很长时间
- encryption - ECIES 是公共加密算法吗?
- python - 在 Windows 命令提示符中运行 Python 脚本时如何修复 NameError