ios - 在 iOS/Swift 中以编程方式设置 View 后 RevealViewController 不工作

标签 ios iphone swift swrevealviewcontroller

首先,让我介绍一下我正在尝试做的事情。其次...我是 Swift/iOS 开发的新手。

我想做的是: 当我打开 APP 时,它会加载 LoginVC。当用户登录时,TableSelectionVC 加载。如果用户选择一个单元格,它将转到带有所选值的主屏幕。如果用户点击铃铛(蓝色箭头),应用程序应转到 AlarmVC。

它应该可以工作,但实际上没有。 AlarmVC 表示 self.revealViewController() 为 nil但是 如果我通过菜单选项(红色箭头)转到 alarmVC,它会正常加载并显示菜单。此外,如果我选择绿色选项,它会转到 TableSelectionVC,如果我点击该图标,它会转到 alarmVC 并且不会崩溃。问题是如果我从 LoginVC 转到 TableSelectionVC 并点击图标,它会崩溃。

我认为这是我设置 View 、实例化 Controller 和设置 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 绑定(bind)时做错了什么。

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 谁能帮忙?

最佳答案

我修好了。我将登录屏幕设置为 swRevealViewController 的 sw_front,之后,当用户登录时,我将更改 swRevealViewController 前 View Controller

      let storyboard = UIStoryboard(name: "Main", bundle: nil)
      let controller = storyboard.instantiateViewController(withIdentifier: "navPlantSelectionVC")
      self.revealViewController().setFront(controller, animated: true)

它现在正在工作。

关于ios - 在 iOS/Swift 中以编程方式设置 View 后 RevealViewController 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46007422/

相关文章:

ios - 更改音量和打开/关闭静音模式

ios - UITextView 在 UITableViewCell 内部增长

iphone - Google Places API 响应状态 "Request_Denied"

swift - ARKit 中 x、y 和 z 的 SCNVector3 位置使用哪个测量单位

arrays - Swift Array Extension 用 n-previous 值的总和替换索引 n 的值

ios - 打印parse.com当前使用的版本

ios - 导航(和状态)栏颜色与编程不同(alpha 自动设置为 0.85)

iphone - 未调用完成 block 。如何检查有效性?

iphone - 将核心数据添加到 XCode 4 中的现有项目

ios - 隐藏 TableView 单元格并删除 TableView 空间