Как бы я пропустил все UIButtons
на мой взгляд в Swift? Я хотел бы установить все заголовки в ""
, но мой цикл for в Swift дает ошибку.
for btns in self.view as [UIButton] {
// set the title to ""
}
Как бы я пропустил все UIButtons
на мой взгляд в Swift? Я хотел бы установить все заголовки в ""
, но мой цикл for в Swift дает ошибку.
for btns in self.view as [UIButton] {
// set the title to ""
}
Этот код должен работать:
for view in self.view.subviews as [UIView] {
if let btn = view as? UIButton {
btn.setTitleForAllStates("")
}
}
Вам нужно выполнить итерацию через массив subViews.
Сокращено и обновлено для Swift 3 & 4
for case let button as UIButton in self.view.subviews {
button.setTitleForAllStates("")
}
В Swift 2/Swift 3 он может быть упрощен даже больше
for case let button as UIButton in self.view.subviews {
button.setTitleForAllStates("")
}
Для получения дополнительной информации см. Patterns в справочной системе Swift.
Цикл работы над subview работает, но иногда он немного уродлив и имеет другие проблемы.
Если вам нужно зациклиться на некоторых определенных кнопках, например, чтобы добавить радиус угла или изменить оттенок или цвет фона, вы можете использовать массив IBOutlets, а затем перебрать его.
var buttons = [SkipBtn, AllowBtn]
for button in buttons as! [UIButton] {
button.layer.cornerRadius = 5
}
Этот код, по-видимому, очень полезен для итерации по любому объекту в представлении, просто измените UIButton для любого другого типа subview, такого как UIView или UIImageView и т.д.
let filteredSubviews = self.view.subviews.filter({
$0.isKindOfClass(UIButton)})
for view in filteredSubviews {
//Do something
}
Использовал некоторые из предложенных вопросов и создал свои собственные. Я считаю, что это наиболее эффективно, если вы хотите программно настроить заголовок различных 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)
}
}
Swift 4:
let subviewButtons = self.view.subviews.filter({$0.isKind(of: UIButton.self)})
for button in subviewButtons {
//do something
}
Если у вас есть 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)
}
Надеюсь, это поможет!
Здесь короткий путь в Swift, если вы знаете, что subview имеет только кнопки:
myView.subviews.map {
($0 as? UIButton)!.enabled = false
}