Создание кнопок с уникальными именами через цикл for в Swift 4 - PullRequest
0 голосов
/ 09 мая 2018

Я создаю приложение со сложным интерфейсом, который требует 45 кнопок. По разным причинам я не использую Interface Builder. Чтобы обновить свойства для определенных кнопок, мне нужно, чтобы каждая из кнопок имела уникальное имя (Btn1, Btn2, Btn3 ...). Вот код, который я использую:

let buttonsArray = ["Btn1",  "Btn2",  "Btn3",  "Btn4",  "Btn5",  "Btn6",
                    "Btn7",  "Btn8",  "Btn9",  "Btn10", "Btn11", "Btn12",
                    "Btn13", "Btn14", "Btn15", "Btn16", "Btn17", "Btn18",
                    "Btn19", "Btn20", "Btn21", "Btn22", "Btn23", "Btn24",
                    "Btn25", "Btn26", "Btn27", "Btn28", "Btn29", "Btn30",
                    "Btn31", "Btn32", "Btn33", "Btn34", "Btn35", "Btn36"]
for button in buttonsArray  {
    let button = UIButton(frame: CGRect(x: nextx, y: nexty, width: btnsiz, height: btnsiz))
    button.isUserInteractionEnabled  = true
    button.alpha = 0.05
    button.tag = tagnum
    tagnum += 1
    button.backgroundColor = UIColor(red: 0.997, green: 0.645, blue: 0.014, alpha: 1.0)
    button.setTitle(notesarray[count], for: .normal)
    button.setTitleColor(UIColor.black, for: .normal)
    button.layer.cornerRadius = 0.5 * button.bounds.size.width
    button.clipsToBounds = true
    button.backgroundColor = UIColor(red: 0.991, green: 0.607, blue: 0.33, alpha: 1.0)
    button.addTarget(self, action: #selector(btnPressed), for: .touchUpInside)
    self.view.addSubview(button)
    btnarray[count] = false
    setNextX()
    element += 1
    count += 1
} 

Когда кнопка нажата, она распознается. Я назначил уникальный номер тега. Я хочу иметь возможность обновлять свойства на основе имени кнопки (Btn1), например: Btn1.isUserInteractionEnabled = true. Я получаю сообщение об ошибке «Использование неопознанного идентификатора« Btn1 ». Как получить имя, указанное, как я мог бы в Интерфейсном Разработчике с IBOutlet?

1 Ответ

0 голосов
/ 09 мая 2018

Боюсь, что IBOutlets - это единственное, что делает Interface Builder - отсюда и «IB» в названии «IBOutlet».

Если вы хотите получить ссылку на подпредставление представления, вы можете использовать свойство UIView tag .Я вижу, что вы уже используете это свойство тега, передавая ему «tagnum», которое похоже на то, что оно увеличивается для каждой кнопки, подобно именам в ButtonsArray.

Например, если вы хотите получить кнопку с тегом 1, вы можете запросить ее следующим образом:

let Btn1 = self.view.viewWithTag(1)

Затем вы можете сделать то, что вы предлагаете:

Btn1.isUserInteractionEnabled = true

Кроме того, я бы порекомендовал вам назвать ваши переменные, начинающиеся с буквы в нижнем регистре, с следовать рекомендациям :

Следовать соглашениям по кейсам. Имена типов и протоколов - UpperCamelCase.Все остальное нижеCamelCase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...