需要帮助配置NSTimer和UIButton

时间:2011-07-22 07:34:10

标签: iphone objective-c xcode cocoa-touch nstimer

我有以下秒表功能代码。

我有2个UIButtons。一个是开始/停止,另一个是重置。

我想将这两个组合成只有1个按钮,用作启动按钮,然后在计时器运行时,它将是一个停止按钮,当按下时,重置计时器。

如何修改此代码以反映这一点?

- (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 :(得分:0)

你可以做的步骤:

  1. 从您的UI中删除重置按钮;

  2. 修改startStop方法,以便在计时器已经运行时按下该方法,它会向自己发送reset消息:

  3. 我认为这应该足够了。看看这段代码:

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

    通过这种方式,您将能够以更通用的方式使用此方法。