Имеет ли массив childViewControllers определенный порядок в контроллере представления с различными контейнерами? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть базовый View Controller с различными контейнерами внутри.Я использую их для управления текущим шагом процесса, и только один из них виден одновременно.Я создал перечисление для шагов и использую его Int rawValue для доступа к контейнерам, соответствующим каждому тегу, изменяя его видимость.

Но в некоторые моменты мне приходится передавать некоторую информацию одному или нескольким изшаговые контроллеры.Я думал использовать тот же подход enum для доступа к позиции соответствующего View Controller в массиве childViewControllers, чтобы сделать это.

Проблема в том, что я не нашел ничего в документации, которая гарантировала бы, что массив childViewControllersвсегда в одном и том же порядке, поэтому я могу использовать этот подход.

Кто-нибудь знает это или есть лучший способ добиться чего-то подобного?

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Возможно, было бы лучше сохранить порядок вручную, например, создав переменную Array, которая будет заполняться ссылками для ваших контейнеров / контроллеров в необходимом вам порядке.

Просто подключите все виды контейнера к розеткесбор и скрытие или отображение определенных его элементов

@IBOutlet var containers: [UIView]!

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

Для поддержания порядка контроллеров просто создайте переменную массива и заполните ее ссылками контроллеров.Если вы используете сегменты, добавьте пункты назначения для вставки сегментов.Если вы добавляете дочерние контроллеры с помощью addChild(_:), просто добавьте контроллеры, которые вы добавляете

var controllers: [UIViewController]
0 голосов
/ 22 марта 2019

Если ваши виды контейнеров подключены через IBOutlet s, и вы хотите отслеживать их с помощью «упорядоченного» массива, вы можете сделать это:

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
0 голосов
/ 22 марта 2019

Да, заказано

let v = Vvv()

self.addChild(v)

let d = Ddd() 

self.addChild(d)

print(self.children)

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

1009

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...