TextField不会在Cocoa应用程序中更新

时间:2014-06-14 15:44:07

标签: objective-c macos cocoa

我在Cocoa中创建一个简单的倒计时应用程序。当我点击“开始倒计时”按钮时,我得到了旋转鼠标指示器。在正确的时间之后(例如,如果在框中放置“2”,应用程序将等待2秒),TextField会直接跳到0.这是我的代码:

#import "APPAppDelegate.h"

@implementation APPAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (IBAction)StartCountdown:(id)sender {
    int counterNow, counterLater;
    counterNow = [_FieldCount intValue];
    while (counterNow>1){
        counterNow = [_FieldCount intValue];
        counterLater = counterNow - 1;
        [NSThread sleepForTimeInterval:1.0f];
        [_FieldCount setIntValue:counterLater];
    }
}
@end

1 个答案:

答案 0 :(得分:1)

您需要让运行循环运行才能使更新进入屏幕。你正在改变价值,然后睡觉线程。一个更好的方法是让NSTimer设置文本字段的文本,然后在其上调用-setNeedsDisplay:YES。像这样:

-(void)fireTimer:(NSTimer*)timer
{
    counterNow = [_FieldCount intValue];
    counterNow--;
    [_FieldCount setIntValue:counterNow];
}

这假定_FieldCountNSTextField。您可以通过创建重复计时器来设置它。如果您希望每秒重复一次,则可以执行以下操作:

NSTimer* secondsTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES];