У вас проблемы с состоянием.Одним состоянием было бы то, что кнопка запуска нажата, но кнопка сброса не была нажата до этого.Другое состояние состоит в том, что кнопка запуска нажата, и кнопка сброса была нажата перед этим.Одна вещь, которую вы можете сделать, это создать iVar для отслеживания этого состояния.Поэтому используйте BOOL следующим образом:
Сначала объявите iVar:
BOOL resetHasBeenPushed;
Инициализируйте значение NO.
Затем сделайте это
- (IBAction)onResetPressed {
stopWatchLabel.text = @”00:00:00:000″;
resetHasBeenPushed = YES;
Теперь вам нужно в какой-то момент установить его обратно в NO, и это может быть сделано в методе start:
- (IBAction)onStartPressed {
startDate = [NSDate date];
// Create the stop watch timer that fires every 10 ms
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
resetHasBeenPushed = NO;
}
}
Кстати, если вы сделаете свой NSDateFormatter в iVar, вы ненужно инициализировать его повторно.Переместите следующие строки в свой код inti или в другое место, где он выполняется только один раз:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss.SSS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
ОБНОВЛЕНИЕ
Попробуйте это:
- (IBAction)onStartPressed {
if (resetHasBeenPushed== YES) {
startDate = [NSDate date]; // This will reset the "clock" to the time start is set
}
// Create the stop watch timer that fires every 10 ms
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
}