繁体   English   中英

Swift:如何在视图控制器之间进行切换,并使用导航栏在子视图控制器中向后移动(XLPagerTabStrip)

[英]Swift: How to segue between view controllers and use navigation bar to go backwards within a child view controller (XLPagerTabStrip)

我目前正在实施XLPagerTabStrip( https://github.com/xmartlabs/XLPagerTabStrip ),它可以在视图控制器的顶部有效地创建一个标签栏。 我希望能够从其中一个选项卡式控制器中切换到新的视图控制器,并能够使用导航栏向后移动(如果不可能,则使用导航栏的自定义版本)。

XLPagerTabStrip提供moveToViewControllermoveToViewControllerAtIndex函数以在子视图控制器之间导航,但此方法不允许使用导航栏向后移动。

我不熟悉XLPagerTabStrip,但我最近遇到了类似的问题,解决方案是使用unwind segue返回上一个视图控制器。 这实现起来非常简单,所以值得一试。

从概念上讲, XLPagerTabStrip是在XLPagerTabStrip模型创建期间声明和初始化的视图控制器的集合。 如果您已经拥有所有的viewcontrollers,那么使用UINavigationController几乎没有任何意义。 您可以创建全局var previousIndex来存储先前的viewController索引,并允许用户使用规范方法返回:

func moveToViewControllerAtIndex(index: Int)
func moveToViewControllerAtIndex(index: Int, animated: Bool)
func moveToViewController(viewController: UIViewController)
func moveToViewController(viewController: UIViewController, animated: Bool)

关于一个新的viewController,假设你有4个viewControllers构建你的容器( XLPagerTabStrip ),例如z1,z2,z3和z4。 你可以在z4中嵌入一个UINavigationController (所以它有z4控制器作为rootViewController)并开始推送或弹出你的外部视图。 如果要返回z4,可以将popToRootViewControllerAnimatedUINavigationController

当你回到z4时,你可以在这里处理你的全局var previousIndex来移动XLPagerTabStrip

要导航回以前的视图选项卡控制器,您最初已导航;

  1. 嵌入您的新视图控制器 ,您希望从导航栏中导航

  2. 通过在两个视图之间拖动一个segue,将其导航栏按钮连接到包含标签栏的父视图

  3. 在App委托中创建一个全局变量来存储当前索引,您将在Parent视图中使用该变量来确定要显示的选项卡视图控制器

    var previousIndex: Int = 0 //0 being a random tab index I have chosen

  4. 在您的新视图控制器 (您希望从中删除)viewdidload函数中,创建一个全局变量的实例,如下所示,并指定一个值来表示容纳它的子选项卡栏视图控制器的代表索引。

     //Global variable instance to set tab index on segue let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.previousIndex = 2 

您可以根据需要为多个子选项卡连接的视图编写此内容,记住要设置相应的子选项卡索引,以便将其转换回

  1. 现在,创建一个类属性以引用您的全局变量和父视图中的函数,如下所示

     let appDelegatefetch = UIApplication.shared.delegate as! AppDelegate 

功能

func moveToViewControllerAtIndex(){
    if (appDelegatefetch.previousIndex == 1){
        self.moveToViewControllerAtIndex((self.appDelegatefetch.previousIndex), animated: false)
    } else if (appDelegatefetch.previousIndex == 2){
        self.moveToViewControllerAtIndex((self.appDelegatefetch.previousIndex), animated: false)
    }
}
  1. 您现在可以在父视图控制器的viewDidLoad中调用此函数,如下所示。

    moveToViewControllerAtIndex()

运行你的项目就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM