0

更新 1

我通过将条件放入dealCard而不是in 来解决循环不停止的问题startPause

更新 1

更新 0

- (IBAction)startPause: (UIButton *)sender{
    NSString *buttonTitle = sender.currentTitle;
    if ([buttonTitle isEqualToString: @"Pause"]) {

        [self.myButton setTitle:@"Resume" forState:UIControlStateNormal];
        [timer invalidate];
    }
    else
    {
        [self.myButton setTitle:@"Pause" forState:UIControlStateNormal];
        if ([self.deal length]>cardNum) {
            timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                     target:self
                                                   selector:@selector(dealCard)
                                                   userInfo:nil
                                                    repeats:YES];
        }
        else
            [timer invalidate];

    }
}

除了上面修改过的代码之外,我还按照多人的建议添加了IBOutletfor 的属性,并将其更改为from ,并删除了对from的调用。现在系统似乎可以工作,只是“while”条件的失败不会正确地使子句中的in无效。myButtonNSTimerrepeats:YESrepeats:NO[self startPause]dealCardself.deal length]>cardNumNSTimerelse

我可以使用一些反馈来说明为什么无效不会被解雇。

更新 0

继续这个已回答的问题,我正在尝试添加“startPause”UIButton 的“Pause”部分。点击按钮后,我希望它的标题和动作为“暂停”,然后我希望它的标题在“恢复”和“暂停”之间切换。

该按钮是在 Storyboard 中创建的,我想不出如何为按钮创建一个标识符,以便我可以以编程方式对其进行更改。我怀疑我现在需要增强按钮的IBAction方法以包含“发件人”,但我可能还差得很远。

目前我有以下未完成的代码。

- (IBAction)startPause: (UIButton *)sender{
    NSString *buttonTitle = sender.currentTitle;
    if ([buttonTitle isEqual: @"Pause"]) {
    [myButton setTitle:@"Resume" forState:UIControlStateNormal];   //**** myButton is what?     

    if ([self.deal length]>cardNum) {
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                 target:self
                                               selector:@selector(dealCard)
                                               userInfo:nil
                                                repeats:NO];
    }
    }
}

(我知道我还没有开始代码的“其他”部分。)

我如何在情节提要中myButton连接我的startPause按钮?

4

2 回答 2

1

你的方法的sender参数startPause应该是UIButton你想要的,所以你可以sender直接修改。也就是说,在您的代码片段中替换myButton为。sender

另一种方法的优点是,如果您从其他任何地方暂停/恢复,您仍然可以访问按钮并更新其标题,即为IBOutlet按钮制作一个。在你的课堂@interface部分,你会有类似的东西:

@property (nonatomic, strong) IBOutlet UIButton *pauseResumeButton;

然后当您想要引用按钮时,您可以使用self.pauseResumeButton_pauseResumeButton

于 2013-06-12T20:25:02.613 回答
1

听起来您在 Storyboard 中有一些错误的连接。对于您的 UIButton (myButton),您的 .h 文件中应该有两个挂钩

(1) @property (strong, nonatomic) IBOutlet UIButton *myButton;
(2) - (IBAction)startPause:(id)sender;

(1) 将允许您在 .m 文件中的任何位置设置按钮标题,特别是在 myButtonAction 事件中。(2) 当您将按钮连接到您的 .h 文件时,您应该选择 touchUpInside,这样当点击按钮时,事件 myButtonAction 将触发。

EDIT2(解决 NSTimer)

- (IBAction)startPause: (UIButton *)sender{
NSString *buttonTitle = sender.currentTitle;
if ([buttonTitle isEqualToString: @"Pause"]) {

    [self.myButton setTitle:@"Resume" forState:UIControlStateNormal];
    [timer invalidate];
}
else
{
    [self.myButton setTitle:@"Pause" forState:UIControlStateNormal];
    if ([self.deal length]>cardNum) 
    {
      if (!myTimer.isValid)
       {
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                 target:self
                                               selector:@selector(dealCard)
                                               userInfo:nil
                                                repeats:YES];
       }
       else
       {
         //do nothing - timer has been created already
       }
    }
    else 
    {
        [timer invalidate];
    }
}
}

该文档也可能有所帮助。

于 2013-06-12T20:44:08.477 回答