2017-09-01 107 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,這雖然可能不是最有效的,但解決了問題 –

相關問題