2011-07-22 5 views
1

私はストップウォッチ機能のために次のコードを用意しています。NSTimerとUIButtonを設定するには

私は2つのUIButtonsを持っています。 1つは始動/停止用で、もう1つはリセット用です。

私はこれらの2つを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; 
    } 
} 
+0

このコードはちょうど1つのボタンのためにもうまくいくようです...あなたはそれにどのような問題がありますか? – sergio

答えて

0

ステップ:

  1. あなたUIからのリセットボタンを削除します。タイマーがすでに実行されている間、押されたとき、それは自分自身にresetメッセージを送信するように

  2. startStop方法を変更します。

私はそれが十分であるべきだと思います。このコードを見て:

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

この方法では、あなたがこの方法を使用することができるようになりますより一般的な方法で。

+0

私の編集を見てください – sergio

関連する問題