2

我一直在使用 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)

但我不知道如何使用它。

4

3 回答 3

8

该方法非常简单,但您需要在您的主页(父视图控制器)中调用它

在您的 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
于 2016-12-21T18:10:51.967 回答
1

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

将通过委托展示如何使用这些功能

func moveToViewController(在索引处: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,动画:布尔)

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

于 2017-09-10T14:42:47.423 回答
0

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

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

在方法内部调用这行代码viewDidLoad()

于 2021-05-23T05:20:53.157 回答