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

时间:2016-06-15 13:08:57

标签: ios swift uinavigationbar childviewcontroller xlpagertabstrip

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

概念上XLPagerTabStrip是在XLPagerTabStrip模型创建期间声明和初始化的视图控制器的集合。 如果您已经拥有所有可用的视图控制器,那么使用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,可以popToRootViewControllerAnimated <{1}} UINavigationController

当您返回到z4时,您可以在此处理全局变量previousIndex以便在XLPagerTabStrip内移动。

答案 2 :(得分: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
    
  5. 您可以根据需要为多个子选项卡连接的视图编写此内容,并记住设置您想要转换回的相应子选项卡索引

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

      let appDelegatefetch = UIApplication.shared.delegate as! AppDelegate
      
    2. 功能

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

      2. 运行你的项目就是这样。