【问题标题】:Performing a segue on a view controller that is nested inside of another view controller in swift在嵌套在另一个视图控制器内的视图控制器上快速执行 segue
【发布时间】:2015-11-06 06:43:18
【问题描述】:

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

【问题讨论】:

    标签: ios swift ipad segue uicontainerview


    【解决方案1】:

    是的。您可以在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 添加到容器中。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我的解决方案可能对

      有帮助

      首先我在 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)
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多