如何根据iOS中的时间安排更改UIView元素?

时间:2014-07-03 16:56:54

标签: ios uiview nstimer

我正在开发一个应用程序,其中UIView具有元素(如图像,按钮等),这些元素标有时间文本,如下午2:30,下午3:30。现在我希望当我的viewDidLoad调用时,如果当前时间已经过了2:30 PM,那么该对象的视图应该更改,如果当前时间没有超过其下午3:30,则其视图应该保持不变。

enter image description here

如图所示,如果当前时间早于下午12:30和下午2:15,则这两个按钮的view应该更改,其他按钮视图应保持不变。

我已尝试将NSDateNSDateFormatter类转换为整数并对其进行比较,但我没有得到完美的输出。

我需要在这里使用NSTimer课吗?

3 个答案:

答案 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
}