Зацикливание запрограммированных меток и кнопок - PullRequest
0 голосов
/ 27 сентября 2018

В последнем viewcontroller моего приложения я написал код, который создает количество меток, которые заполнены случайными символами из набора

Под метками появляются текстовые поля, где пользователь должен совпасть с символами меток,Когда он нажимает кнопку, его ответ проверяется.Если ответ правильный, оценка обновляется.

После этого должна обновляться метка оценки, и должен генерироваться и показываться новый текст для меток с символами, но вот где я застреваю ... Мой инстинктчтобы добавить цикл к коду в viewDidLoad, но так как код для проверки ответа находится в функции buttonAction вне viewDidLoad, я не знаю, как это сделать ...

Вотнекоторый код из моего приложения, который может прояснить ситуацию.Я удалил довольно много простого кода и добавил строку комментария только для этого примера.

override func viewDidLoad()
{
    super.viewDidLoad()

    // variables are declared, the number of labels is calculated based on the frame size
    // the text for the labels is calculated based on a function in a separate class I wrote

            var a = 0
            while a < numberOfLabels {
                // the UILabels are made and filled
                // the corresponding UITextFields are made
                a += 1
                labelX += labelWidth
            }
            // then here the button is coded, the last lines are:
            myButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
            view.addSubview(myButton)
}

@objc func buttonAction(sender: UIButton!) {
    var a = 0
    var rightAnswer = false
    var userInput: [String] = Array()
    while a < numberOfLabels.shared.category! {
        if let theLabel = self.view.viewWithTag(a) as? UITextField {
            let tekstInput = theLabel.text
            userInput.insert(tekstInput!, at:a-1)
        }
        a = a + 1
    }
    let controle = Controle()
    rightAnswer = controle.checkAnswer(userAnswer: userInput)
    if rightAnswer {
        if var score = PassScore.shared.category {
        score += 1
        PassScore.shared.category = score
        }
        else {
            var score = 1
            PassScore.shared.category = score
        }
    }
    return
}

1 Ответ

0 голосов
/ 27 сентября 2018

Имейте свой код инициализации в функции

func setupLabels() {
    var a = 0
        while a < numberOfLabels {
            // the UILabels are made and filled
            // the corresponding UITextFields are made
            a += 1
            labelX += labelWidth
        }
}

И вызывайте его всякий раз, когда вам это нужно:

override func viewDidLoad()
{
    super.viewDidLoad()
    setupLabels()
}

@objc func buttonAction(sender: UIButton!) {
    //...
    setupLabels()
}
...