![](/img/trans.png)
[英]Swift: How to segue back to first view controller after using child view controllers from the 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提供moveToViewController
和moveToViewControllerAtIndex
函数以在子视图控制器之间导航,但此方法不允许使用导航栏向后移动。
我不熟悉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,可以将popToRootViewControllerAnimated
为UINavigationController
当你回到z4时,你可以在这里处理你的全局var previousIndex
来移动XLPagerTabStrip
。
要导航回以前的视图选项卡控制器,您最初已导航;
嵌入您的新视图控制器 ,您希望从导航栏中导航
通过在两个视图之间拖动一个segue,将其导航栏按钮连接到包含标签栏的父视图
在App委托中创建一个全局变量来存储当前索引,您将在Parent视图中使用该变量来确定要显示的选项卡视图控制器
var previousIndex: Int = 0 //0 being a random tab index I have chosen
在您的新视图控制器 (您希望从中删除)viewdidload函数中,创建一个全局变量的实例,如下所示,并指定一个值来表示容纳它的子选项卡栏视图控制器的代表索引。
//Global variable instance to set tab index on segue let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.previousIndex = 2
您可以根据需要为多个子选项卡连接的视图编写此内容,记住要设置相应的子选项卡索引,以便将其转换回
现在,创建一个类属性以引用您的全局变量和父视图中的函数,如下所示
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)
}
}
您现在可以在父视图控制器的viewDidLoad中调用此函数,如下所示。
moveToViewControllerAtIndex()
运行你的项目就是这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.