найти кнопки-потомки во вложенном контейнере - PullRequest
0 голосов
/ 05 июня 2019

Я поместил кнопки в несколько вложенных StackViews

Затем я поместил представления в CollectionView (да, я понимаю, что это не обязательно лучший или оптимальный способ сделать это).

Я пытаюсь выяснить, как программно найти все мои кнопки.

Если я сделаю это, все, что я получу, это мой StackView вместо того, чтобы получать кнопки (которые теперь являются потомками 3-го уровня). Я бы не хотел исправлять вложенный цикл и вместо этого найти функцию, которая поможет мне найти всех потомков типа UIButton.

        for subview in buttonContainer.subviews {
            let button = subview as? UIButton
            if button != nil {
                button!.setTitle("TEST", for: UIControl.State.normal)
            }    
        }

Причина, по которой я это делаю, заключается в том, чтобы изучать различные методы, поэтому я хорошо вкладываю несколько стековых представлений и затем помещаю их в CollectionView

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вам необходимо создать recursive method, например:

func buttonsIn(_ view: UIView) {
    if let button = view as? UIButton {
        button.setTitle("TEST", for: .normal)
    } else {
        view.subviews.forEach({ buttonsIn($0) })
    }
}

Использование:

buttonsIn(view)

Изменить recursive methodсогласно вашему требованию.

1 голос
/ 05 июня 2019

Я не проверял это, но с помощью рекурсии вы сможете это сделать. Нечто подобное может работать для вас:

func findButtonsIn(_ view: UIView) -> [UIButton] {
    var buttons: [UIButton] = []
    view.subviews.forEach({
        if let button = $0 as? UIButton {
            buttons.append(button)
        } else {
            buttons.append(contentsOf: self.findButtonsIn($0))
        }
    })
    return buttons
}

Использование

findButtonsIn(yourView)

Функция вернет все найденные UIButtons в виде массива.

Вы можете использовать

self.findButtonsIn(UIView()).enumerated().forEach({
    $0.element.setTitle("\($0.offset)", for: .normal)
})

например, чтобы установить заголовок кнопок в порядке, в котором они были найдены.

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