我正在开发一个应用程序,其中UIView
具有元素(如图像,按钮等),这些元素标有时间文本,如下午2:30,下午3:30。现在我希望当我的viewDidLoad调用时,如果当前时间已经过了2:30 PM,那么该对象的视图应该更改,如果当前时间没有超过其下午3:30,则其视图应该保持不变。
如图所示,如果当前时间早于下午12:30和下午2:15,则这两个按钮的view
应该更改,其他按钮视图应保持不变。
我已尝试将NSDate
和NSDateFormatter
类转换为整数并对其进行比较,但我没有得到完美的输出。
我需要在这里使用NSTimer
课吗?
答案 0 :(得分:2)
您可以使用NSTimer
执行您所描述的操作。
将此添加到您的viewDidLoad
:
self.uiTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(updateUI:)
userInfo:nil
repeats:YES];
此计时器(不要忘记定义管理它的属性)将每5秒调用一次目标方法,但您可以根据自己的要求进行更改。
然后,定义一个这样的目标方法,您可以在其中修改UI:
- (void)updateUI:(NSTimer*)timer {
<if time is less than X, then… else …>
}
完成后,请不要忘记使计时器无效(例如在viewDidDisappear
中):
-(void)viewDidDisappear:(BOOL)animated {
[self.uiTimer invalidate];
self.uiTimer = nil;
[super viewDidDisappear:animated];
}
答案 1 :(得分:1)
你不需要使用NSTimer类。我遇到了同样的问题而且我使用了[NSDate compare]类。 您必须获取按钮的titleLable文本并将其存储为NSString,而不是使用NSDate,NSDateFormatter类将此字符串与当前时间进行比较。
像这样:
NSString *str1 = btn1.titleLabel.text;
NSDate *occDate = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"hh:mm a"];
NSString *occStr = [formatter stringFromDate:occDate];
NSDate *lDate = [formatter dateFromString:occStr];
NSDate *d1 = [formatter dateFromString:str1];
NSComparisonResult result1 = [lDate compare:d1];
if(result1 == NSOrderedDescending)
{
[btn1 setBackgroundColor:[UIColor redColor]];
}
希望它有效。
答案 2 :(得分:0)
如果您希望每60分钟调用一次方法:
.h文件
@property (strong, nonatomic) NSTimer *timer;
.m文件
- (void)startTimer {
if (timer.isValid)
return;
timer = [NSTimer timerWithTimeInterval:3600 target:self selector:@selector(myMethod) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[timer fire];
}
- (void)myMethod {
// change element code
}