Изменять свойства обьекта без IBOutlet. Swift
У меня в сториборде на ViewController'е есть несколько лейблов у которых нет связи с классом этого сториборда. Outlet i Action не подключены.
Как я могу поменять цвет заднего фона для всех лейблов на экране без подключений (Outlet i Action) ?
Я думал можно использовать какой то extension для класса, что то типа этого, но оно не работает.
extension MyViewController {
func changeBG(_ sender:UIButton) {
sender.backgroundCOlor = .white
}
}
class MyViewController:UIViewCоntroller {
override func viewDidLoad() {
super.viewDidLoad()
changeBG(UIButton) //-> Error
//Cannot convert value of type 'UILabel.Type' to expected argument type 'UILabel'
}
}
Ответы (2 шт):
Чтобы проделывать такое, Вам нужно создавать элементы интерфейса кодом, а не на сториборде. Например, создание лейбла:
private let yourLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Привет!"
label.textAlignment = .center
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5
return label
}()
Далее в тексте программы, добавив этот лейбл на свою вьюшку и установив в коде констрейнты, вы можете менять свойства лейбла (или сразу нескольких) обращаясь к нему через обычный точечный синтаксис. Например, сделать невидимым:
yourLabel.isHidden = true
или изменить текст:
yourLabel.text = "Новый текст"
По сути, ваш пример ориентирован на тоже самое (на элементы, созданные кодом), только там как-то, мне кажется, не очень верно написано.
Я прохожу циклом по всем view что есть на darkView. И если view типа UILabel, то задаю цвет заднего фона.
for view in self.darkView.subviews as [UILabel] {
if let label = view as? UILabel {
label.backgroundColor = UIColor.black
}
}