0

我有一个秒表,它本身就可以正常工作,但是当我从标签栏的另一个视图切换回来时,秒表会做一些奇怪的事情(点击导航视图上的后退按钮可以正常工作)。

  1. 当用户从另一个选项卡切换回来时,秒表标签是隐藏的,即使在显示视图时它应该是可见的。

  2. 如果当用户点击另一个选项卡并再次点击秒表选项卡时秒表正在运行,则秒表转到 -31:-23.-64,并且停止按钮(应该重置计时器并显示开始按钮)被点击时不会做任何事情。

  3. 如果当用户点击另一个选项卡并再次点击秒表选项卡时秒表未运行,则秒表将正常启动,但当用户点击开始按钮时停止按钮不显示。

这是我的代码:

。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;

米:

- (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;
}

请让我知道我能做些什么来解决这个问题,或者是否需要其他任何东西。

4

1 回答 1

1

首先,看起来 startDate 搞砸了。init正在被调用。它应该只是[NSDate date]

至于没有出现的视图......在计算日期之后,timer.text正在设置一些东西。什么是定时器?你确定那不应该timer.title吗?在你这样做之后,如果你想要的话,你可能需要[timer setNeedsDisplay]确保在控件上更新文本。

如果文本仍然混乱,请尝试减少更新频率。也许每十分之一秒,看看文本是否表现得更好。

于 2013-01-01T05:59:53.220 回答