【问题标题】:Simple, custom navigation between 4 view controllers4 个视图控制器之间的简单自定义导航
【发布时间】:2015-07-03 16:09:36
【问题描述】:

我有 UIScrollView,其中包含许多以下 订阅视图控制器。每个订阅视图控制器包含容器视图控制器

目标是在右侧的4个ViewsControllers之间做一个简单的导航。

导航逻辑:

  • viewDidLoad 上显示 Container 中的第一个或第二个 View Controller
  • 当用户按下 View Controller 上的按钮时,在 Container 中显示第三个 View Controller

我尝试使用 Segues 但这不起作用。实例化 VC 的方法 订阅视图控制器不是个好主意。

【问题讨论】:

    标签: ios swift cocoa-touch uiviewcontroller


    【解决方案1】:

    使用此代码切换容器视图视图...

    @IBOutlet weak var container: UIView!
       var currentViewController:UIViewController?
    
    //put the view did load method here.
    
    
    
        @IBAction func buttonPressed() {
    
    //the storyboard file that the view is in.
            let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    
    
    // the container view you want to switch to.
       self.currentViewController = storyboard.instantiateViewControllerWithIdentifier("containerViewStoryboardID") as? UIViewController
    
    
    //switch the container view.
            self.addChildViewController(self.currentViewController!)
    
            self.container.addSubview(self.currentViewController!.view)
    
            self.currentViewController!.didMoveToParentViewController(self)
    
    
    }
    

    【讨论】:

    • Emm,这是个坏主意,因为我需要删除子视图,并且从其他 VC 切换时会遇到问题。
    • 这个我用过很多次了,效果很好。您还在寻找什么其他解决方案?您是否只想切换整个 VC?
    • 是的,我需要将整个 VC 切换到其他。但是下一个VC应该能够将自己切换到其他VC。不要忘记数据交换
    【解决方案2】:

    我发现最简单的方法是创建自定义Segue

    1. 创建自定义UIStoryboardSegue

      1. 转到文件 -> 新建 -> 文件...并选择 Cocoa 类

      1. UIStoryboardSegue 创建一个新类

      1. 配置 MySegue
    import UIKit
    
    class NewSegue: UIStoryboardSegue {
    
        //Call when performSegueWithIdentifier() called
        override func perform() {
            //ViewController segue FROM
            var sourceViewController: UIViewController = self.sourceViewController as! UIViewController
            //ViewController segue TO
            var destinationViewController: UIViewController = self.destinationViewController as! UIViewController
            //Parent ViewController - ContainerViewController
            var containerViewController: UIViewController = sourceViewController.parentViewController!
    
            //Setting destinationViewController
            containerViewController.addChildViewController(destinationViewController)
            destinationViewController.view.frame = sourceViewController.view.frame
            sourceViewController.willMoveToParentViewController(nil)
    
            //Do animation
            containerViewController.transitionFromViewController(sourceViewController,
                toViewController: destinationViewController,
                duration: 0.3,
                options: UIViewAnimationOptions.TransitionCrossDissolve,
                animations: nil, completion: { finished in
                    //Delete sourceViewController
                    sourceViewController.removeFromParentViewController()
                    //Show destinationViewController
                    destinationViewController.didMoveToParentViewController(containerViewController)
            })
        }
    }
    
    1. 转到您的 Storyboard 文件并控制从 ContainerViewController 拖动到所需的 Controller 并在上下文菜单中选择 Custom

    3.点击创建的segue并配置它们

    1. 现在您可以在 ContainerViewController 或其他 ViewController 中调用 performSegueWithIdentifier("SugueID", sender: self)

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      相关资源
      最近更新 更多