我有一个单独工作的秒表,但是当我从标签栏的另一个视图切换回来时,秒表会做一些奇怪的事情(点击导航视图上的后退按钮工作正常)。
当用户从另一个标签切换回来时,秒表标签会被隐藏,即使在显示视图时它应该是可见的。
如果秒表正在运行,当用户点击另一个标签并再次点击秒表标签时,秒表会转到-31:-23.-64,并且停止按钮(应重置定时器)并且显示开始按钮)在点击时不会做任何事情。
如果用户点击另一个标签并再次点击秒表标签时秒表未运行,则秒表将正常启动,但当用户点击开始按钮时停止按钮不会显示。 / p>
这是我的代码:
·H:
@interface ViewController : UIViewController {
IBOutlet UIButton *btnStart;
IBOutlet UIButton *btnStop;
IBOutlet UILabel *lblTimer;
NSTimer *stopWatchTimer;
NSDate *stopDate;
NSDate *startDate;
}
@property (strong, nonatomic) IBOutlet UILabel *lblTimer;
- (IBAction)btnStart:(id)sender;
- (IBAction)btnStop:(id)sender;
的.m:
- (void)updateTimer
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss.SS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];
lblTimer.text = timeString;
}
- (IBAction)buttonStart:(id)sender {
startDate = [NSDate date];
// Create the stop watch timer that fires every 1ms
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
btnStop.hidden = NO;
btnStart.hidden = YES;
}
- (IBAction)buttonStop:(id)sender {
[self updateTimer];
btnStop.hidden = YES;
btnStart.hidden = NO;
[stopWatchTimer invalidate];
stopWatchTimer = nil;
}
请让我知道如何解决此问题,或者是否需要其他任何内容。
答案 0 :(得分:1)
首先,看起来startDate搞砸了。正在调用init
。它应该只是[NSDate date]
。
对于未显示的视图...在计算日期后,timer.text
被设置为某种东西。什么是计时器?你确定不应该timer.title
吗?在您这样做之后,您可能需要[timer setNeedsDisplay]
以确保文本在控件上更新,如果这是您想要的。
如果文本仍然混乱,请尝试更新频率。也许每十分钟一次,看看文本是否表现得更好。