Как изменить Title кнопки, при нажатии на другую кнопку

uibutton

#1

Всем привет! у меня такой вопрос: как можно изменить title одной кнопки, при нажатии на другую? Спасибо!


#2

Создайте аутлет от одной кнопки и экшн от второй, а в теле action’a: button1.setTitle("Text", for: .normal)


#3

Можно еще так сменить

buttonOne.titleLabel?.text = “Some text”


#5

Работает, а можно как-то к группе кнопок это применить? при создании outlet дает привязать только к 1 кнопке


#6

Можно вместо “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)})


#7

Для каждой кнопки надо задать в 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)
}

Что-то не пойму, как тут форматирование кода работает, сорри.