UIelement программно создан. Могу ли я взять имя нового созданного UIelement из переменной? - PullRequest
0 голосов
/ 17 февраля 2020

Я отредактировал именно то, что я хочу достичь, на этот раз другой пример без взятого параметра в функции.

Чего я хочу добиться, это:

var array = [String]()
func create() {

var arrayCount = array.count         // will be 0
var nameForUI = "view/(arrayCount)" // will be view0

let nameForUI: UIVIew = {
let view = UIVIew()
return view

}()
array.append(nameForUI)
view.addSubview(nameForUI)
//
}

в следующий раз, если я вызову create () fun c, следующий вид будет называться "view1". Итак, мой вопрос, как достичь этого результата? каждый раз, когда вызывается функция, она создает новый элемент с новым именем.

1 Ответ

1 голос
/ 17 февраля 2020

Редактировать

Чтобы прямо ответить на ваш вопрос: Нет, вы не можете этого сделать.

Код, написанный на Swift, скомпилирован - это это не интерпретируемый / скриптовый язык.

Таким образом, вы не можете написать код, который создает кнопку с именем"littleButton" и затем имеет строку кода littleButton.backgroundColor = .red


Вы можете вроде сделать это, создав словарь, в котором в качестве ключа будет указано «имя» элемента, а в качестве значения будет указана ссылка на элемент.

Начните с инициализации пустого словаря:

var buttonsDict: [String : UIButton] = [String : UIButton]()

Ваше "создание" веселья c может начаться так:

func createButton(named str: String) -> Void {
    // create a button
    let b = UIButton()
    // give it a default title
    b.setTitle("Button", for: .normal)
    // add it to our Dictionary
    buttonsDict.updateValue(b, forKey: str)
}

Когда вы хотите создать кнопку:

createButton(named: "littleButton")

Когда вы хотите получить доступ к этой кнопке по имени :

// use guard to make sure you get a valid button reference
guard let btn = buttonsDict["littleButton"] else { return }
view.addSubview(btn)

Редактировать 2

Другой вариант, который, возможно, больше похож на ваш отредактированный вопрос:

// initialize empty array of views
var viewsArray: [UIView] = [UIView]()

override func viewDidLoad() {
    super.viewDidLoad()

    // create 5 views
    for _ in 0..<5 {
        create()
    }

    // ...

    // then, somewhere else in your code
    viewsArray[0].backgroundColor = .red
    viewsArray[1].backgroundColor = .green
    viewsArray[2].backgroundColor = .blue
    viewsArray[3].backgroundColor = .yellow
    viewsArray[4].backgroundColor = .orange

}

func create() -> Void {
    // create a view
    let v = UIView()
    // add it to our array
    viewsArray.append(v)
    // add it as a subview
    view.addSubview(v)
}

Как видите, вместо попытки ссылаться на созданные представления по имени (что вы не можете сделать), вы можете ссылаться на них по индексу массива.

Просто помните, что массивы основаны на нулях ... поэтому первый элемент добавлен в массив будет на [0] не [1].

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