如何根据iOS中的时间安排更改UIView元素?
我正在开发一个应用程序,在这个应用程序中,如何根据iOS中的时间安排更改UIView元素?,ios,uiview,nstimer,Ios,Uiview,Nstimer,我正在开发一个应用程序,在这个应用程序中,UIView有一些元素(如图像、按钮等),这些元素标有时间文本,如下午2:30、下午3:30。现在我希望调用viewDidLoad时,如果当前时间已过下午2:30,则该对象的视图应更改,如果当前时间未过下午3:30,则其视图应保持原样 如图所示,如果当前时间经过12:30 PM和2:15 PM,则这两个按钮的视图应更改,其他按钮视图应保持原样 我尝试了NSDate和NSDateFormatter类,将字符串转换为整数并进行比较,但没有得到完美的输出 我
UIView
有一些元素(如图像、按钮等),这些元素标有时间文本,如下午2:30、下午3:30。现在我希望调用viewDidLoad时,如果当前时间已过下午2:30,则该对象的视图应更改,如果当前时间未过下午3:30,则其视图应保持原样
如图所示,如果当前时间经过12:30 PM和2:15 PM,则这两个按钮的视图应更改,其他按钮视图应保持原样
我尝试了NSDate
和NSDateFormatter
类,将字符串转换为整数并进行比较,但没有得到完美的输出
我需要在这里使用NSTimer
类吗?您可以使用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 …>
}
如果希望每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
}
您不需要为此使用NSTimer类。我遇到了相同的问题,我使用了[NSDate compare]类。
您必须获取按钮的标题文本,并将其存储为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]];
}
希望它能起作用。你需要一个NSTimer,你可以在中找到很多例子,所以…你知道关于这个的好教程吗?请看我的答案。这是如此简单,你不需要一个教程…谢谢。我已通过添加图像更新了我的问题。如何将NSTimer与NSDate一起使用?(当前时间)。您不将时间与NSDate一起使用。您要做的是,在updateUI
中,获取当前时间,然后比较每个按钮(它们是否在一个数组中?);如果某个按钮比当前时间“旧”,则更改该按钮。我不能提供更多的帮助,因为我不知道你的代码是什么样子的…但我希望这将使你在正确的方向。您需要将NSDate与每个按钮关联,然后将该日期与当前时间进行比较。Dealloc将永远不会被调用,因为计时器保留其目标、可重复且从不失效,因此您应该在VIEWDIDGEARE(如果是“叶”)中的某个位置或从该屏幕返回时使其失效。
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]];
}