在swift中嵌套在另一个视图控制器内的视图控制器上执行segue

时间:2015-11-06 06:43:18

标签: ios swift ipad segue uicontainerview

我有一个视图控制器,它使用容器视图嵌套在另一个视图控制器中。我是否可以从当前位于容器视图中的视图中删除,并将其替换为同一容器视图中的另一个视图控制器。即占用整个视图的另一个视图控制器不会删除容器视图周围的内容。

2 个答案:

答案 0 :(得分:0)

是的。您可以在Apple Docs

中了解相关信息

考虑到你的containerView目前只有一个viewcontroller,这是一个非常基本的例子:

func loadVCWithId(idToLoad: String){
    childViewControllers[0].willMoveToParentViewController(nil)
    childViewControllers[0].view.removeFromSuperview()
    childViewControllers[0].removeFromParentViewController()

    let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier(idToLoad)

    UIView.transitionWithView(yourContainer, duration: 0.5, options: UIViewAnimationOptions.TransitionFlipFromRight, animations: {self.yourContainer.addSubview((secondViewController?.view)!)}, completion: nil)


    secondViewController!.view.frame = firstContainer.bounds
    // do initialization of secondViewController here
    secondViewController?.didMoveToParentViewController(self)
}

loadVCWithId(idToLoad:String)是主机视图控制器中的一种方法。

在这个代码片段中,我删除了容器的当前内容(可能不是访问索引0的最佳方式,但是为了这个例子,这应该就足够了),通过ID实例化一个新的ViewController(这个存在于我的故事板中,但尚未访问活动文件),为转换设置动画并实际将新VC添加到容器中。

希望这有帮助。

答案 1 :(得分:0)

这个我的解决方案可能对

有帮助

首先我在childViewController上创建一个协议

protocol ChildViewControllerDelaget

{

    func performForSegue(SegueIdentifier:String)

}

class ChildViewController: UIViewController {

   var delaget:ChildViewControllerDelaget?

   override func viewDidLoad() {
        super.viewDidLoad()

   }

  init() 
    {  

     }


 @IBAction func myAction(sender: AnyObject) {

if delaget != nil {
deleget.performForSegue("mySegueIdentifier")
}

}

和MainViewController

class ViewController: UIViewController,ChildViewControllerDelaget  {


    override func viewDidLoad()

    {

      super.viewDidLoad()

      let child = ChildViewController()

      child.delaget = self



    }

    func performForSegue(segueIdentifier:String) 

   {

      self.performSegueWithIdentifier(segueIdentifier, sender: nil)

    }

}