Всем привет! у меня такой вопрос: как можно изменить title одной кнопки, при нажатии на другую? Спасибо!
Как изменить Title кнопки, при нажатии на другую кнопку
Создайте аутлет от одной кнопки и экшн от второй, а в теле action’a: button1.setTitle("Text", for: .normal)
Работает, а можно как-то к группе кнопок это применить? при создании outlet дает привязать только к 1 кнопке
Можно вместо “Outlet” создать “Outlet collection”, перетащить туда несколько кнопок. У вас будет массив из UIButton. В action другой кнопки пройтись циклом по элементам массива и присвоить каждому значение:
@IBOutlet var buttons: [UIButton]!
@IBAction func buttonPressed(_ sender: UIButton) {
for index in 0...buttons.count - 1 {
buttons[index].setTitle("Text", for: .normal)
}
}
Или так:
buttons.map({ $0.setTitle("Text", for: .normal)})
Для каждой кнопки надо задать в Attributes inspector значения для поля tag (к примеру от 1 до 4, для четырех кнопок – первой 1, второй 2 и т.д,)
Затем для кнопок нужно создать outlet collection – правым кликом тянем от кнопки связь в файл и выбираем outlet collection. Другие кнопки по правому клику тянем на этот массив.
@IBOutlet var myButtons: [CustomButton]! //Outlet Collection для кнопок (массив)
//Затем перебираем наши кнопки в цикле
for i in 0..<myButtons.count {
let button = workoutVButtons[i] as UIButton
switch myButtons[i].tag {
case 1: //Если значение tag = 1 то присваиваем название кнопке 1
button.setTitle("Button-1", for: .normal)
case 2: //Если значение tag = 2 то присваиваем название кнопке 2
button.setTitle("Button-2", for: .normal)
case 3:
button.setTitle("Button-3", for: .normal)
case 4:
button.setTitle("Button-4", for: .normal)
default:
break
}
}
Как-то так
Можно еще названия кнопок запихнуть в массив и присваивать значения кнопке по индексу, тогда не надо пользоваться тэгами.
//
let buttonTitles = ["1", "2", "3", "4"]
for i in 0..<myButtons.count
{
let button = myButtons[i] as UIButton
button.setTitle(buttonTitles[i], for: .normal)
}
Что-то не пойму, как тут форматирование кода работает, сорри.