4

我知道如何使用 NSDate 来获取时间并将其显示在 UILabel 中。

我需要显示日期+小时和分钟。知道如何在不忙于等待的情况下保持更新吗?

谢谢!

4

4 回答 4

6

使用 NSTimer 更新标签上的时间

- (void)viewDidLoad
 {
  [super viewDidLoad];

   [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
 }



-(void)updateTime
{


NSDate *date= [NSDate date];
NSDateFormatter *formatter1 = [[NSDateFormatter alloc]init]; //for hour and minute

formatter1.dateFormat = @"hh:mm a";// use any format 

clockLabel.text = [formatter1 stringFromDate:date];

[formatter1 release];


}
于 2013-03-17T10:23:21.900 回答
2

正如您的评论所说,如果您想在分钟更改时更改label.text

你应该这样做:

1st:获取当前时间:

NSDate *date = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date];

并设置label.text = CURRENTHOUR_AND_YOURMINNUTS

然后在下一分钟刷新标签,如下所示:

首先,您可以在60 - nowSeconds [self performSelector:@selector(refreshLabel) withObject:nil afterDelay:(60 - dateComponents.minute)] 之后检查;

- (void)refreshLabel
{
    //refresh the label.text on the main thread
    dispatch_async(dispatch_get_main_queue(),^{      label.text = CURRENT_HOUR_AND_MINUTES;    });
    // check every 60s
    [self performSelector:@selector(refreshLabel) withObject:nil afterDelay:60];
}

它会每分钟检查一次,所以效果不仅仅是上面的答案。

调用时refreshLabel,表示分钟已更改

于 2013-03-17T10:52:04.443 回答
1

您可以使用 NSTimer 定期获取当前时间。

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];

- (void)timerFired:(NSTimer*)theTimer{
 //you can update the UILabel here.
}
于 2013-03-17T10:22:41.107 回答
-1

您可以使用 NSTimer ,但是,鉴于上述方法,UILabel 不会在触摸事件上更新,因为主线程将忙于跟踪它。您需要将其添加到mainRunLOOP

    NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabelWithDate) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

-(void)updateLabelWithDate
{
   //Update your Label
}

您可以更改时间间隔(您想要更新的速率)。

于 2013-03-17T10:32:37.057 回答