首先,让我介绍一下我想做的事情。其次...我是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
有人可以帮忙吗?

最佳答案

我修好了它。我将登录屏幕设置为swRevealViewController的sw_front,之后,当用户登录时,我将使用以下命令更改swRevealViewController前视图控制器:

      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/

10-10 20:57