2017-09-01 64 views
0

首先,让我介绍一下我正在尝试做的事情。其次......我是Swift/iOS开发新手。RevealViewController以编程方式在iOS/Swift中设置视图后不工作

This is My Storyboard

我试图做的是: 当我打开APP,它加载LoginVC。当用户登录时,TableSelectionVC加载。如果用户选择了一个单元格,它会使用选定的值进入主屏幕。如果用户点击铃声(蓝色箭头),应用程序应该去AlarmVC。

它应该工作,但它没有。 AlarmVC表示self.revealViewController()为零但是如果我通过菜单选项(红色箭头)进入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,但它崩溃,就像我说的。我认为我在使用LoginVC和TableSelectionVC绑定SWRevealViewController时遇到了一些问题。

在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(_:)) 
} 

但就是显示错误在第三行:发现零而展开的可选值 谁能帮助?

回答

0

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

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

它现在的工作。

+0

你在哪里做这个改变?请详细解释 –

+0

@CraigP我将LoginVC设置为sw_front,在LoginVC.swift中有一个函数用于检查用户是否已签名。在这个函数里面我使用了这个代码。根据条件,我只是改变了vc标识符。 (对不起,我没有看到它) –

+0

谢谢我有一个类似的问题,当应用程序关闭时从通知加载到特定的VC。在我打电话给我想要加载的VC之前,我最终调用了一个空白的VC,这虽然可能不是最有效的,但解决了问题 –

相关问题