【发布时间】:2018-02-10 22:37:40
【问题描述】:
首先,让我介绍一下我正在尝试做的事情。其次...我是 Swift/iOS 开发的新手。
我想要做的是: 当我打开 APP 时,它会加载 LoginVC。当用户登录时,会加载 TableSelectionVC。如果用户选择了一个单元格,它将转到带有所选值的主屏幕。如果用户点击铃铛(蓝色箭头),应用应该转到 AlarmVC。
它应该工作,但它没有。 AlarmVC 说 self.revealViewController() 为 nil。 但是如果我通过菜单选项(红色箭头)进入alarmVC,它会正常加载并显示菜单。此外,如果我选择绿色选项,它会转到 TableSelectionVC,如果我点击图标,它会转到 alarmVC,它不会崩溃。问题是如果我从 LoginVC 转到 TableSelectionVC 并点击图标,它会崩溃。
我认为这是我设置视图、实例化控制器和设置 window.rootViewController 的方式。
在我的 AppDelegate 中,我有以下功能:
func changeRootViewControllerToSWRevealViewController () {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
controller.modalTransitionStyle = .flipHorizontal
if let window = self.window {
window.rootViewController = controller
}
}
func changeRootViewControllerToPlantSelectionVC () {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "navPlantSelectionVC")
controller.modalTransitionStyle = .flipHorizontal
if let window = self.window {
window.rootViewController = controller
}
}
当用户登录应用时,会执行以下函数:
static func goToPlantSelection() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
//there should be an alert error
return
}
appDelegate.changeRootViewControllerToPlantSelectionVC()
}
之后,将显示 PlantSelectionVC,如果用户点击单元格,则会执行 appDelegate.changeRootViewControllerToSWRevealViewController() 并显示 HomeVC。
如果用户点击图标,它会尝试转到 AlarmVC,但它会崩溃,就像我说的那样。我认为我在将 SWRevealViewController 与 LoginVC 和 TableSelectionVC 绑定时做错了。
AlarmVC 中的以下代码尝试执行:
static func setupMenuToggle(button: UIBarButtonItem, viewController: UIViewController) {
button.target = viewController.revealViewController()
viewController.revealViewController().rearViewRevealWidth = viewController.view.bounds.size.width * 0.9
button.action = #selector(SWRevealViewController.revealToggle(_:))
}
但是在第三行显示错误:在展开可选值时发现 nil 任何人都可以帮忙吗?
【问题讨论】:
标签: ios iphone swift swrevealviewcontroller