1

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

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

4

3 回答 3

0

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

于 2016-06-15T13:33:15.420 回答
0

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

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

关于一个新的视图控制器,假设您有 4 个视图控制器来构建您的容器 ( XLPagerTabStrip),例如 z1、z2、z3 和 z4。您可以嵌入到 z4 a UINavigationController(因此它具有 z4 控制器作为 rootViewController)并开始推送或弹出您的外部视图。当您想返回您的 z4 时,您可以popToRootViewControllerAnimated对您的UINavigationController

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

于 2016-06-15T13:51:32.940 回答
0

要导航回以前的视图选项卡控制器,您最初是从以下位置导航的;

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

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

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

    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()

运行你的项目,就是这样。

于 2017-09-13T15:07:59.020 回答