Подтвердить что ты не робот

Как прокрутить все UIButtons в моем представлении Swift?

Как бы я пропустил все UIButtons на мой взгляд в Swift? Я хотел бы установить все заголовки в "", но мой цикл for в Swift дает ошибку.

for btns in self.view as [UIButton] {
  // set the title to ""
}
4b9b3361

Ответ 1

Этот код должен работать:

for view in self.view.subviews as [UIView] {
    if let btn = view as? UIButton {
        btn.setTitleForAllStates("")
    }
}

Вам нужно выполнить итерацию через массив subViews.

Ответ 2

Сокращено и обновлено для Swift 3 & 4

for case let button as UIButton in self.view.subviews {
    button.setTitleForAllStates("")
}

Ответ 3

В Swift 2/Swift 3 он может быть упрощен даже больше

for case let button as UIButton in self.view.subviews {
    button.setTitleForAllStates("")
}

Для получения дополнительной информации см. Patterns в справочной системе Swift.

Ответ 4

Цикл работы над subview работает, но иногда он немного уродлив и имеет другие проблемы.

Если вам нужно зациклиться на некоторых определенных кнопках, например, чтобы добавить радиус угла или изменить оттенок или цвет фона, вы можете использовать массив IBOutlets, а затем перебрать его.

var buttons = [SkipBtn, AllowBtn]
for button in buttons as! [UIButton] {
    button.layer.cornerRadius = 5
}

Ответ 5

Этот код, по-видимому, очень полезен для итерации по любому объекту в представлении, просто измените UIButton для любого другого типа subview, такого как UIView или UIImageView и т.д.

let filteredSubviews = self.view.subviews.filter({
    $0.isKindOfClass(UIButton)})

for view in filteredSubviews {
    //Do something        
}

Ответ 6

Использовал некоторые из предложенных вопросов и создал свои собственные. Я считаю, что это наиболее эффективно, если вы хотите программно настроить заголовок различных UIButtons (в моем случае я строю викторину)

В randomising мой список массивов и всего лишь цикл for Я печатаю элемент по индексу с названием кнопки

for view in self.viewForButtons.subviews{
        if view.isKindOfClass(UIButton)
        {
            let button : UIButton = view as! UIButton
            button.setTitle("item[i]", forState: .Normal)
        }
    }

Ответ 7

Swift 4:

let subviewButtons = self.view.subviews.filter({$0.isKind(of: UIButton.self)})

for button in subviewButtons {
    //do something        
}

Ответ 8

Если у вас есть UIView в self.view, вам нужно перебирать подпредставления во время поиска UIButton. Используя принятый ответ, я сделал для этого небольшую функцию:

Swift 4+:

func findButton('in' view: UIView){
    for view in view.subviews as [UIView] {
        if let button = view as? UIButton {
            // Do something with 'button'
        }else{
            // Loop through subview looking for buttons
            findButton(in: view)
        }
    }
}

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

override func viewDidLoad() {
    findButton(in: self.view)
}

Надеюсь, это поможет!

Ответ 9

Здесь короткий путь в Swift, если вы знаете, что subview имеет только кнопки:

myView.subviews.map {
  ($0 as? UIButton)!.enabled = false
}