【问题标题】:RevealViewController not working after programmatically set a view in iOS / Swift在 iOS / Swift 中以编程方式设置视图后 RevealViewController 不起作用
【发布时间】: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


    【解决方案1】:

    我修好了。我将 swRevealViewController 的登录屏幕设置为 sw_front ,之后,当用户登录时,我会更改 swRevealViewController 前视图控制器

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

    它现在正在工作。

    【讨论】:

    • 您在哪里进行了此更改?请详细解释一下
    • @CraigP 我将 LoginVC 设置为 sw_front 并且在 LoginVC.swift 中有一个函数可以检查用户是否已签名。在那个函数中,我使用了这段代码。根据情况,我只是更改了 vc 标识符。 (抱歉之前没看到)
    • 谢谢 我在应用关闭时从通知加载到特定 VC 时遇到了类似的问题。在调用我想加载的 VC 之前,我最终调用了一个空白 VC,这解决了问题,尽管可能不是最有效的
    猜你喜欢
    • 2020-01-24
    • 2017-09-25
    • 2018-04-02
    • 2014-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多