childViewControllers数组在具有各种容器的视图控制器中是否具有特定顺序?

时间:2019-03-22 19:38:56

标签: ios swift uicontainerview childviewcontroller

我有一个基本的View Controller,其中包含各种容器。我使用它们来控制流程的当前步骤,并且一次只能看到其中一个。 我为这些步骤创建了一个枚举,并使用它的Int rawValue通过标记访问与每个步骤相对应的容器,从而更改了其可见性。

但是在某些时候,我必须将一些信息传递给一个或多个步进控制器。我在考虑使用相同的枚举方法来访问childViewControllers数组中相应View Controller的位置。

问题是,我没有在文档中找到任何可以确保childViewControllers数组始终处于同一顺序的东西,因此我可以使用这种方法。

有人知道吗,或者有更好的方法实现类似目标?

3 个答案:

答案 0 :(得分:1)

也许最好手动保持顺序,例如创建Array变量,该变量将按您需要的顺序填充您的容器/控制器的引用。

只需将所有容器视图连接到插座集合,然后隐藏或取消隐藏其中的某些元素

@IBOutlet var containers: [UIView]!

containers[0].isHidden = true
containers[1].isHidden = false

要保持控制器的顺序,只需创建数组变量并用控制器的引用填充它。如果您使用的是segues,请附加嵌入segues的目的地。如果您要通过addChild(_:)添加子控制器,只需添加要添加的控制器

var controllers: [UIViewController]

答案 1 :(得分:0)

是的已订购

let v = Vvv()

self.addChild(v)

let d = Ddd() 

self.addChild(d)

print(self.children)
  

[dfjkfjdjdjdfjfdkas.Vvv:0x1041086e0,dfjkfjdjdjdfjfdkas.Ddd:0x104012060]


class Vvv:UIViewController {

} 
class Ddd:UIViewController {

}

enter image description here

答案 2 :(得分:0)

如果您的容器视图是通过IBOutlet连接的,并且希望使用“有序”数组来跟踪它们,则可以执行以下操作:

class ContainersViewController: UIViewController {

    @IBOutlet var containerA: UIView!
    @IBOutlet var containerB: UIView!
    @IBOutlet var containerC: UIView!

    var orderedContainers = [UIView]()

    override func viewDidLoad() {
        super.viewDidLoad()

        orderedContainers = [containerA, containerB, containerC]

    }

}

从那里开始,您可以使用索引,如下所示:

orderdContainers[1].isHidden = true