IOS UILabel не обновляется, пока я не перезагружу приложение или не нажму в другом месте - PullRequest
0 голосов
/ 05 сентября 2018

Я новичок в разработке для iOS и новичок в концепции замыканий. Используя раскадровку, я создал UIButton и UILabel, поэтому, когда я нажимаю кнопку, отображается предупреждение с действием, а когда я отклоняю предупреждение, метка увеличивает число внутри метки, но я хочу, чтобы это приращение было после отклонения оповещения. поэтому я использовал концепцию замыкания, чтобы отложить увеличение числа внутри метки следующим образом:

class ViewController: UIViewController {
    @IBOutlet weak var numberLbl: UILabel!
    var count = 1

    func updateLabels(){
        numberLbl.text = String(count)
        count += 1
    }

    @IBAction func btnPressed(){
        let alert = UIAlertController(title: "hello", message: "this is an alert", preferredStyle: .alert)
        let action = UIAlertAction(title: "OK", style: .default, handler: { action in
            print("incrementing.... ") // it print this text
                                       // in console
            self.updateLabels()        // but not this line does not work
        // but when i reload the app it updates the number label
        /// !!!!!!!!
        })

        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }
}

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

я пробовал это на физическом устройстве, и я отлично работает, но на симуляторе это не

Я использую MacBook Pro в конце 2011 года

спасибо

Ответы [ 3 ]

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

Вы обновили текст UILabel перед обновлением переменной count

var count : Int = 1 {
    didSet {
        numberLbl.text = "\(count)"
    }
}

func updateLabels() {    
    count += 1
}
0 голосов
/ 06 сентября 2018

после долгих поисков я обнаружил, что это из-за ошибки в macs с intel HD graphic 3000, поэтому это ошибка драйвера и обходной путь для этого - выполнить эту команду, которая сработала для меня (к счастью)

defaults write com.apple.CoreSimulator.IndigoFramebufferServices FramebufferEmulationHint 2

или используйте 1 в зависимости от вашего оборудования

спасибо, парень, за помощь :)

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

Единственным аспектом вашего кода, который я изменил в вашем коде, был способ, которым вы объявили свою кнопку.

@IBAction func btnPressed(_ sender: UIButton)

Кроме того, вы можете попробовать очистить (Command Shift K) и попытаться восстановить.

Кроме того, я запустил ваш код как есть, и он работал правильно.

...