2015-10-05 55 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