2015-10-05 82 views
0

我想利用這個我函數內部函數運行之後呈現一個視圖控制器的功能裏面,所以包括這裏面使用presentviewcontroller迅速

let window = UIWindow() 
let rootViewController = window.rootViewController 
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
let setViewController = mainStoryboard.instantiateViewControllerWithIdentifier("EmployeeTBCIdentifier") 
rootViewController?.presentViewController(setViewController, animated: true, completion: nil) 

它沒有做任何事情,它的工作原理,如果我用它裏面viewDidLoad中()

這裏的主要思想,並且有可能根據這個例子使用落成,

func logInType(completion(Void1, Void2)->()) { 
if login == employer{ 
    void1 
}else if login == employee{ 
    void2 
    } 
} 

使用我想retur函數時n

func logInType{(void1, void2) -> void in 
void1 = self.presentview //I want to push view to another if this code executed 
void2 = self.presentview //same idea 
} 

已更新:代碼正在工作,但未推送到已標識的視圖控制器。

dispatch_async(dispatch_get_main_queue()){ 
         let window = UIWindow() 
         let rootViewController = window.rootViewController 
         let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
         let setViewController = mainStoryboard.instantiateViewControllerWithIdentifier("EmployeeTBCIdentifier") 
         rootViewController?.presentViewController(setViewController, animated: true, completion: nil) 
        } 
+0

您可以在您嘗試呈現viewController的地方添加整個函數嗎? – Karlos

回答

1

對我來說可能是一個問題,你如何得到rootViewController。我認爲let window = UIWindow()調用將返回一個新的UIWindow對象,而不是您想要的,這是根視圖控制器(和您的應用)關聯的窗口。繼續這一點,rootViewControllernil和您可選的連鎖電話rootViewController?.presentViewController(setViewController, animated: true, completion: nil)不會做任何事情。通過rootViewController!.presentViewController(setViewController, animated: true, completion: nil)使用一個明確的展開,你應該看到錯誤

要糾正,得到正確的UIWindow另一種方式,無論是從UIAppDelegate或使用OtherViewController.view!.window!

+0

我做了你所說的並且它返回了「致命錯誤:意外地發現零,同時展開可選值」 – suisied

+0

是的,所以當你使用'rootViewController!.presentViewController(setViewController,animated:true,completion:nil) ?這將是正確的,因爲rootViewController是零。使用我上面提到的方法之一成功獲取正確的UIWindow並從中檢索rootViewController。 –

+0

我用戶「var window:UIWindow?」類似於appdelegates declaration.same錯誤「致命錯誤:在解包可選值時意外發現爲零」,並且我明確解開了你所說的內容 – suisied

0

另一個視圖控制器嘗試使用它像這樣:

 dispatch_async(dispatch_get_main_queue()) 
     { 
       let storyboard = UIStoryboard(name: "Main", bundle: nil) 
       let vc = storyboard.instantiateViewControllerWithIdentifier("mainView") as! MainViewController 
       self.presentViewController(vc, animated: true, completion: nil) 

     } 
+0

我同意。我認爲你甚至不需要使用GCD。 而且在更好的情況下,更喜歡使用guard-style/if_let-style,而不是使用as! (不批評,但更安全) – jlngdt

+0

我不能訪問self.presentviewController(VC,動畫,完成),我可以訪問的屬性只是self.presentViewController(<#T ## UIViewController#>) – suisied

+0

糾正我的答案 – suisied