4 个视图控制器之间的简单自定义导航

Posted

技术标签:

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

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

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

导航逻辑:

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

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

【问题讨论】:

【参考方案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

    创建自定义UIStoryboardSegue

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

      UIStoryboardSegue 创建一个新类

      配置 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)
        )
    

    转到您的 Storyboard 文件并控制从 ContainerViewController 拖动到所需的 Controller 并在上下文菜单中选择 Custom

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

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

【讨论】:

以上是关于4 个视图控制器之间的简单自定义导航的主要内容,如果未能解决你的问题,请参考以下文章

防止自定义 UINavigationBar 元素在视图之间更改

Swift:嵌入在导航控制器中的视图之间的自定义segue

Fullcalendar 自定义视图问题(导航)

如何在自定义导航中添加 viewwillappear 和 viewdidappear 之间的延迟?

自定义 segue 到导航控制器层次结构中的特定子视图

自定义 iOS 导航控制器动画:这是错的吗?