首先,讓我介紹一下我正在嘗試做的事情。其次......我是Swift/iOS開發新手。RevealViewController以編程方式在iOS/Swift中設置視圖後不工作
我試圖做的是: 當我打開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(_:))
}
但就是顯示錯誤在第三行:發現零而展開的可選值 誰能幫助?
你在哪裏做這個改變?請詳細解釋 –
@CraigP我將LoginVC設置爲sw_front,在LoginVC.swift中有一個函數用於檢查用戶是否已簽名。在這個函數裏面我使用了這個代碼。根據條件,我只是改變了vc標識符。 (對不起,我沒有看到它) –
謝謝我有一個類似的問題,當應用程序關閉時從通知加載到特定的VC。在我打電話給我想要加載的VC之前,我最終調用了一個空白的VC,這雖然可能不是最有效的,但解決了問題 –