2017-03-10 253 views
0

我使用此代碼在ViewController中的容器內加載視圖控制器而不使用任何segue。 例子:從另一個控制器加載視圖控制器

let newViewController =self.storyboard?.instantiateViewController(withIdentifier: "FBViewController") 
      newViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
      self.cycleFromViewController(oldViewController: self.currentViewController!, toViewController: newViewController!) 
      self.currentViewController = newViewController 

此代碼工作的任何控制器,但在一種情況下,我需要加載一個名爲FBViewController控制器,並在其viewDidLoad中我檢查,如果用戶登錄,如果他是我想加載另一個控制器而不是立即使用FBViewController。 我嘗試這個代碼FBViewController的viewDidLoad中內:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let controller = storyboard.instantiateViewController(withIdentifier: "userProfilePage") 
      self.present(controller, animated: true, completion: nil) 

我試圖調用在主視圖控制器的方法來加載想要的視圖:

let otherViewController: ViewController = ViewController() 
      otherViewController.loggedIn() 

方法:

func loggedIn(){ 
    let newViewController = self.storyboard?.instantiateViewController(withIdentifier: "userProfilePage") 
    newViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
    self.cycleFromViewController(oldViewController: self.currentViewController!, toViewController: newViewController!) 
    self.currentViewController = newViewController 
} 

他們都沒有工作。我感謝任何幫助。

+0

您的代碼部分不完整,所以無法理解。但要確保當你嘗試呈現新的控制器時,你應該在主線程中完成它。我不知道你的目標是什麼,但是你可以在其他ViewController上展示新的控制器,或者如果你使用的是導航控制器而不是推新控制器。如果可能的話給出你的需求的細節,並且可能是更詳細的代碼部分。 – Premal

+0

@Premal我編輯了描述,現在希望它顯而易見。 –

+0

請勿在視圖中使用該代碼進行加載,在視圖內部使用它確實出現。 –

回答

0

你可以試試下面的內部MainViewController:

var newViewController : UIViewController 
if loggedIn == true { 
    newViewController = self.storyboard?.instantiateViewController(withIdentifier: "userProfilePage") 
} else { 
    newViewController = self.storyboard?.instantiateViewController(withIdentifier: "FBViewController") 
} 

newViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
self.cycleFromViewController(oldViewController: self.currentViewController!, toViewController: newViewController!) 
self.currentViewController = newViewController 
0

你應該工作的代碼,就到你的故事板,然後選擇你要撥打的控制器。然後確保在故事板ID下,您具有與您用來調用它相同的名稱。

相關問題