2016-02-01 4 views
0

У меня проблема с обновлением моей метки и не может найти никаких решений в Интернете. Мне нужно, чтобы метка обновлялась, как только ее текст менялся. Я просто использую простого наблюдателя.Обновление UILabel Swift

var updateLabel: String = "" { 
    didSet { 
     label.text = updateLabel //This doesn't update 
     print(updateLabel)  //This Prints 
    } 
} 

var count: Int? = 0 

while (count! < 1000000) { 
    count!++ 
    updateLabel = "\(count!)" 
} 

Я пробовал это, но это не помогло.

dispatch_async(dispatch_get_main_queue()) { 
} 

setNeedsDisplay() 
+1

Похоже, вы можете оживить число, которое изменится. Возможно, вам захочется ознакомиться с реализацией (или просто использовать) open-source [UICountingLabel] (https://github.com/dataxpress/UICountingLabel). –

+0

Хорошая идея. Я использовал это и варианты с отличными результатами. –

+0

Счет был просто быстрым примером, который дает мне ту же проблему, что и мой исходный код. – HovyTech

ответ

4

По умолчанию элементы управления не будут обновляться немедленно, но обновляются в следующем цикле выполнения.

Поскольку вы зацикливаете миллион раз, вы блокируете обновления, и 999,999 тех изменений, которые вы пытаетесь сделать в пользовательском интерфейсе, даже не будут применяться.

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

Как в стороне, вызов setNeedsDisplay позволяет системе знать, что метка должна быть обновлена ​​в следующем цикле запуска. Он не обновляет его сразу, как вы думаете. Но это действительно лишнее, так как изменение текста ярлыка уже помечено ярлыком, поскольку оно нуждается в обновлении.

+0

Есть ли работа вокруг? Возможно ли обновить его в текущем цикле выполнения? – HovyTech

+2

@ HovyTech, очевидно, существует предел скорости обновления экрана ... но вы, вероятно, захотите настроить «CADisplayLink», вычислить продолжительность между обновлениями и соответственно увеличить свою переменную. Таким образом, метка get обновляется в соответствии с циклом запуска. – Hamish

+1

Я думаю, что вы можете создать свой собственный цикл запуска и управлять им самим, лучшее решение для решения – Woodstock

Смежные вопросы