swift - NavigationController PushViewController 不显示
问题描述
我正在尝试导航到ClassroomViewController
收到推送通知后的位置。我已经设置了一个断点,它会命中所有行,但它没有显示ClassroomViewController
. 我想知道我当前的实现中缺少什么。
我在故事板上添加了标识符ClassroomViewController
。
应用委托
public var keyWindow: UIWindow? {
return UIApplication.shared.windows.first { $0.isKeyWindow }
}
不起作用的辅助方法。我想知道为什么以下方法不起作用。
private func notificationToNavigate() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate,
let topViewController = appDelegate.keyWindow?.rootViewController
else { return }
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let cVC = storyboard.instantiateViewController(withIdentifier:"ClassroomViewController") as! ClassroomViewController
topViewController.navigationController?.pushViewController(cVC, animated: true)
}
有效的辅助方法
private func notificationToNavigate() {
guard let window = UIApplication.shared.keyWindow else { return }
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let cVC = storyboard.instantiateViewController(withIdentifier:"ClassroomViewController") as! ClassroomViewController
window.rootViewController = UINavigationController(rootViewController: cVC)
window.makeKeyAndVisible()
}
解决方案
如果topViewController
确实是关键窗口的根视图控制器,那么它不能有导航控制器;如果推送是可能的,那么它必须是一个导航控制器。所以你会说
(topViewController as? navigationController)?.pushViewController...
另一方面,如果不是topViewController
导航控制器(因此上述失败),那么推送是根本不可能的,您需要考虑其他事情要做。
推荐阅读
- r - networkDynamic 的 edge.spells 参数的开始时间列必须是数字
- apache-spark - 成功创建火花上下文后,Livy 会话卡在启动
- vba - 自动复制章节
- bluetooth-lowenergy - BluetoothLEAdvertisementPublisher 在 Win10 上不起作用
- css - SVG 图标不可见
- javascript - YUP 验证期间出错“无法读取未定义的属性‘长度’”
- listview - UWP ListView 不垂直滚动
- solr - 将数据从 Hive 集群导入到 solr6.2 集群时出现一个错误
- highcharts - 如果文本太长,则在顶部显示 highcharts 节点文本
- c# - 如何将字节 [] 从 blob 上传到 varbinary(max) 到 sql