iOS:如何在函数中刷新视图?

Fre*_*edv 1 ios

我对iOS编程非常陌生,但我已经遇到了一个无法解决的大问题.看起来很容易.

我有一个按钮,我点击它来更改一个名为的标签 message

这是代码:

- (IBAction)react:(id)sender {
    int hasard ;
    hasard=3; 
    message.text=[NSString stringWithFormat:@"1 %d",hasard];    
    sleep (1);
    message.text=[NSString stringWithFormat:@"2 %d",hasard]; 
}
Run Code Online (Sandbox Code Playgroud)

它运作良好,但我没有看到第一个message.text变化.当我点击按钮时,我必须等待一秒钟才会看到2 3

我以为我能看到1 3,等一下,然后看2 3.缺什么?这似乎很明显.

Joe*_*Joe 6

sleep()将暂停当前线程执行,这是主线程,因此您将阻止所有UI操作,直到方法完成.您需要安排第二个分配在指定时间后运行,而不会阻止当前运行循环.这可以通过GCD实现.

- (IBAction)react:(id)sender {
    int hasard ;
    hasard=3; 
    message.text=[NSString stringWithFormat:@"1 %d",hasard];

    int64_t delayInSeconds = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        message.text=[NSString stringWithFormat:@"2 %d",hasard];
    });
}
Run Code Online (Sandbox Code Playgroud)