以编程方式切换子视图控制器:XLPagerTabStrip

Posted

技术标签:

【中文标题】以编程方式切换子视图控制器:XLPagerTabStrip【英文标题】:Switch child viewcontrollers programmatically : XLPagerTabStrip 【发布时间】:2016-11-19 11:48:12 【问题描述】:

我一直在使用 XLPagerTabStrip 在我的视图控制器顶部有效地创建一个标签栏,其中显示了多个子视图控制器。让我们调用 Home 作为父控制器,它扩展了 ButtonBarPagerTabStripViewController。有两个子视图控制器,Child1 和 Child2。一切都像我预期的那样完美。但现在我需要一个要求,我必须以编程方式切换子视图控制器。即,当一个进程(在child2中)完成时,它应该触发将选项卡从Child 2切换到Child1。我知道有几种方法,

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

但我不知道如何使用它。

【问题讨论】:

您能否进一步解释这个问题,因为您尝试做的事情非常简单。你被困在哪里了? @Adeel 我只需要从另一个标签切换。即,我想在完成 API 调用后从孩子 2 回到孩子 1。 XLPagerTabstrip 中使用了给定的方法。但是不知道怎么用? 【参考方案1】:

这个方法很简单,但是你需要在你的主页(父视图控制器)中调用它

在您的 Child2 视图控制器类中,编写如下代码

//after some process done here

let parentViewController = self.parent! as ParentViewController

parentViewController.moveToViewController(at: 0) //Assume your child1 view controller is on index 0

【讨论】:

【参考方案2】:

**这些方法可以如下使用:

将通过委托展示如何使用这些函数

func moveToViewController(at index: Int) :

您需要传递目标子控制器的索引,为此您可以通过初始化父控制器从您的子控制器调用此函数,或者您可以设置一个委托,该委托将在您的父控制器中实现并应该被触发从您的子视图控制器中,最终它将选择带有动画的目标控制器。

 protocol MyDelegate 
   func selectChildControllerAtIndex(toIndex: Int!)
   func selectViewController(viewController: UIViewController)
 

ChildProcceedPressedDelegate 需要符合您的父控制器

在 selectViewController 中,您需要从子控制器传递目标控制器的引用,您可以通过将其存储在某处并传递它来实现。

internal func selectViewController(viewController: UIViewController) 
    moveTo(viewController: viewController, animated: true)

在 selectChildControllerAtIndex 中,您只需传递目标控制器的索引:

func selectChildControllerAtIndex( toIndex: Int!) 
    self.moveToViewController(at: index, animated: true)

func moveToViewController(在索引处:Int,动画:Bool):

它的工作原理与上述方法相同,但在此您可以传递是否要为目标控制器设置动画。使用委托:selectChildControllerAtIndex

func moveTo(viewController: UIViewController)

它通过传递您的目标子控制器引用来工作,它将动画到您的目标控制器。 通过委托:selectViewController

func moveTo(viewController: UIViewController, animated: Bool)

它通过传递您的目标子控制器引用来工作,它会根据您的选择为您的目标控制器设置动画。 通过委托:selectViewController

【讨论】:

【参考方案3】:

这是移动任何特定子视图控制器的完美解决方案。您只需要一些延迟来更改视图控制器

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) 
     self.moveToViewController(at: 1, animated: true)
  

viewDidLoad()方法中调用这行代码。

【讨论】:

以上是关于以编程方式切换子视图控制器:XLPagerTabStrip的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式切换视图

以编程方式从模态视图控制器切换父选项卡

以编程方式更改子视图控制器

如何在视图控制器中以编程方式切换视图? (Xcode,iPhone)

以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图

如何以编程方式为情节提要中的子视图设置视图控制器?