Нужна помощь в настройке NSTimer и UIButton - PullRequest
1 голос
/ 22 июля 2011

У меня есть следующий код для функции секундомера.

У меня есть 2 кнопки UIB.Один для запуска / остановки, другой для сброса.

Я хочу объединить эти 2 в одну кнопку, которая функционирует как кнопка запуска, а затем, когда таймер работает, это будет кнопка остановки, что при нажатии сбрасывает таймер.

Как я могу изменить этот код, чтобы отразить это?

- (IBAction)startStop:(UIButton *)sender 
{
    if ( self.myTimer ) 
    {
        [self.myTimer invalidate];
        self.myTimer = nil;

        [sender setTitle:@"Start" forState:UIControlStateNormal];
    } 
    else 
    {
        self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES];
        [sender setTitle:@"Stop" forState:UIControlStateNormal];
    }
}

- (void)handleTimer:(NSTimer *)timer 
{
    self.counter--;
    self.timerLabel.text = [NSString stringWithFormat:@"%ld", self.counter];

    if ( self.counter <= 0 )
    {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        [self.myTimer invalidate];
        self.myTimer = nil;
        self.timerButton.enabled = NO;
    }
}

- (IBAction)reset:(id)sender 
{
    self.timerButton.enabled = YES;
    self.counter = self.counterSegment;
    self.timerLabel.text = timerCount;
    self.timerButton.titleLabel.text = @"Start";
    self.timerButton.titleLabel.adjustsFontSizeToFitWidth = YES;
}
- (void)segmentedControl:(SVSegmentedControl*)segmentedControl didSelectIndex:(NSUInteger)index
{
    if ( self.myTimer ) 
    {
        [self.myTimer invalidate];
        self.myTimer = nil;
        self.timerButton.titleLabel.text = @"Start";
        self.timerButton.titleLabel.adjustsFontSizeToFitWidth = YES;
    }   
    else
    {
        self.timerButton.enabled = YES;
        self.counter = self.counterSegment;
        self.timerLabel.text = timerCount;
        self.timerButton.titleLabel.text = @"Start";
        self.timerButton.titleLabel.adjustsFontSizeToFitWidth = YES;
    }
    if (index == 0)
    {
        NSLog(@"15 sec");
        self.timerCount = @"15";
        self.counterSegment = 15;
    }
    else if (index == 1)
    {
        NSLog(@"30 sec");
        self.timerCount = @"30";
        self.counterSegment = 30;
    }
}

1 Ответ

0 голосов
/ 22 июля 2011

Шаги, которые вы можете сделать:

  1. удалить кнопку сброса из пользовательского интерфейса;

  2. изменить метод startStop так, чтобы при нажатиипока таймер уже работает, он отправит себе сообщение reset:

Я думаю, этого должно быть достаточно.Посмотрите на этот код:

- (IBAction)startStop:(UIButton *)sender 
{
if ( self.myTimer ) 
{
    [self.myTimer invalidate];
    self.myTimer = nil;

    [self reset:sender];   //-- LINE ADDED

    [sender setTitle:@"Start" forState:UIControlStateNormal];
} 
else 
{
    self.myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES];
    [sender setTitle:@"Stop" forState:UIControlStateNormal];
}
}

Поскольку в reset вы не используете аргумент sender, вы можете удалить его и иметь:

- (void)reset
{
self.timerButton.enabled = YES;
self.counter = self.counterSegment;
self.timerLabel.text = timerCount;
self.timerButton.titleLabel.text = @"Start";
self.timerButton.titleLabel.adjustsFontSizeToFitWidth = YES;
}

Таким образомВы сможете использовать этот метод более общим способом.

...