2013-07-02 4 views
1

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

- (IBAction)ButtonPressed:(id)sender { 
    for(int i = 0; i < 100000; ++i) 
    { 
     [self.Label setText:[NSString stringWithFormat:@"%d",i]]; 
     [self.Label setNeedsDisplay]; 
    } 
} 

При нажатии на кнопку, метка изменяется только один раз в 99999, но я ожидаю, что это отображение 99999 раз от 0 до 99999. Каждый имеет представление о том, почему код является не работает?

Заранее благодарен!

ответ

3

setNeedsDisplay сообщает системе, что ваше мнение хочет, чтобы было нарисовано, но это не заставляет его произойти. Представление будет перерисовано в следующем цикле цикла, который происходит после завершения цикла for. Если вы хотите, чтобы все 100 000 изменений были видимыми, вам придется откладывать обновления ярлыков с помощью ощутимой для человека суммы.

+0

Это правильно. Рисование в iOS не происходит в режиме реального времени. Рисование происходит после завершения вашего метода и попадания в основной цикл. –

+0

Спасибо, это точно. Мне нужно установить время задержки около 0,1 с, и оно отлично работает. – user2480277

2

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

- (IBAction)ButtonPressed:(id)sender { 
    for(int i = 0; i < 100000; ++i) 
    { 
     double delayInSeconds = 0.01 * i; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *  NSEC_PER_SEC)); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [self.Label setText:[NSString stringWithFormat:@"%d",i]]; 
      [self.Label setNeedsDisplay]; 
     }); 
    } 
} 

Для ваших целей, хотя, вероятно, это не имеет значения. Более осязательный подход состоял бы в том, чтобы хранить несколько раз, когда кнопка была нажата в переменной экземпляра, и увеличивать ее каждый раз, когда она затрагивается, и соответствующим образом устанавливать значение метки.

+0

Спасибо. Я использую нечто подобное, и оно работает. – user2480277