【问题标题】:Load view controller from another controller从另一个控制器加载视图控制器
【发布时间】:2017-03-10 09:06:28
【问题描述】:

我正在使用此代码在 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
}

他们都没有工作。感谢您的帮助。

【问题讨论】:

  • 你的代码部分不完整所以看不懂。但是请确保当您尝试呈现新控制器时,您应该在主线程中进行。我不知道您的目标是什么,但您可以在其他 ViewController 上展示新控制器,或者如果您使用导航控制器而不是推送新控制器。如果可能,请详细说明您的要求,并可能是详细的代码部分以便更好地理解。
  • @Premal 我编辑了描述,希望现在很明显。
  • 不要在视图中使用该代码确实加载了,在视图中使用它确实出现了。

标签: ios swift controller


【解决方案1】:

您可以在 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

【讨论】:

    【解决方案2】:

    您拥有的代码应该可以工作,只需转到您的故事板并选择您要调用的控制器。然后确保在故事板 ID 下,您使用的名称与您用来调用它的名称相同。

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2020-02-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多