2016-11-11 109 views
0

我有一個ViewController:如果用戶沒有登錄,我打開一個模塊化的新控制器,以便用戶可以登錄。開幕做這樣:調用從模態呈現視圖控制器的方法

if(!loggedIn){ 
      self.performSegue(withIdentifier:"loginView", sender:self) 
     } 

登錄後,我要關閉此模式,並回到我的ViewController:這是很容易做到的,但我想另一件事。我希望呈現視圖控制器在我解散我的模態之前調用此方法:

func goToContent(animated:Bool){ 
     let viewController:ContentViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Content") as! ContentViewController 
     self.navigationController!.pushViewController(viewController, animated: animated) 
    } 

這可能嗎?從我的模式,我無法獲得對呈現viewController的引用。那就是:我嘗試以下,但我不知道這是否是正確的前進方式:

let vc:ViewController = ViewController() 
vc.goToContent(animated:false) 

這工作,但不存在更好的解決方案?

[編輯回覆在評論一個問題] 我實現了一個代表這樣說:

在視圖控制器

class ViewController: UIViewController, LoginViewControllerDelegate { 

    var loginViewController:LoginViewController = LoginViewController() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     loginViewController.delegate = self 
    } 

在LoginViewController文件,只需在類聲明之前:

protocol LoginViewControllerDelegate: class { 

    func goToContent(animated:Bool) 

} 

Inside LoginViewController:

weak var delegate: LoginViewControllerDelegate? 
在其看來

沒有負載(只是用於測試:我簡單的把goToContent的體內打印):

delegate?.goToContent() 
+0

你有沒有試過這個...如果是的話會發生什麼問題? – KKRocks

+0

有沒有問題:我想知道如果從我的模式安裝呈現視圖控制器是正確的方式進行。我無法得到我的呈現控制器的參考,因爲它是通過segue(performSegue) –

+0

打開的,請添加您的代碼以呈現? – KKRocks

回答

2

您需要創建的ContentViewController一個委託,並在委託你需要添加此方法goToContent

現在,當您成功登錄時,您需要調用此委託方法。它會工作。

+0

但ContentViewController是我使用從打開模式的「基本」視圖控制器中的segue打開的屏幕,gotoContent是包含在該視圖控制器中的函數 –

+0

然後,您需要創建'ViewController'的代表' – Rajat

+0

因此,我不需要創建一個ViewController的實例? –

相關問題