我知道如何使用NSDate来获取时间并将其显示在UILabel中。
我需要显示日期+小时和分钟。 任何想法如何在不忙碌的情况下保持更新?
谢谢!
答案 0 :(得分: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];
}
答案 1 :(得分: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
时,表示分钟已更改
答案 2 :(得分:1)
您可以使用NSTimer定期获取当前时间。
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
- (void)timerFired:(NSTimer*)theTimer{
//you can update the UILabel here.
}
答案 3 :(得分:-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
}
您可以更改时间间隔(您希望更新的速率)。