启动/停止按钮无法正常工作iOS

时间:2016-01-20 10:26:33

标签: ios objective-c

我遇到了一个非常noob的问题,我似乎无法以任何方式解决这个问题,我确信我会忽略一些事情,但是为了上帝而无法弄明白!

好的,我的应用程序中有一个开始/停止按钮,如果操作暂停,它应该恢复操作,如果操作已经运行,则暂停操作。这是我的代码:

- (IBAction)pause:(id)sender {

    if(paused){
        [self.progressBar resumeLayer];
        paused = false;
        NSLog(@"resume");
    }

    if(!paused){
        [self.progressBar pauseLayer];
        paused = true;
        NSLog(@"pause");

    }

}

问题是:当我运行应用程序并按下按钮暂停时,它可以正常工作,但之后它将无法恢复。在NSLogging到控制台后,我发现在恢复后立即调用暂停....为什么这?第一:按钮只被点击一次,怎么能调用两种相反的方法?第二:为什么我的BOOL检查不起作用?

编辑:如果我将其中一个if语句换成了else,那么它运行正常......为什么会这样?

谢谢!

5 个答案:

答案 0 :(得分:3)

请将Paused变量作为BOOL&设置为YES& NO

答案 1 :(得分:2)

什么是"暂停"?全局变量?一个实例变量?我不知道。

约定是实例变量应该以下划线字符开头,如果你只是定义一个属性,它们会自动执行。这样人们至少知道发生了什么。

BOOL值的约定为YES或NO。不是真或假。

真正的无赖当然是你代码中的一个愚蠢的错误。如果暂停== YES,则执行第一个if,暂停设置为NO,然后在下一个测试中检查暂停== NO - 此时它是在哪一个。

通过逐行调试调试器中的代码,您可以轻松找到它。

答案 2 :(得分:2)

- (IBAction)pause:(id)sender {

    if(paused){
        [self.progressBar resumeLayer];
        NSLog(@"resume");
    }

    if(!paused){
        [self.progressBar pauseLayer];
        NSLog(@"pause");
    }

    paused = !paused;

}

答案 3 :(得分:1)

您应该检查else块中的其他状态,而不是有两个if语句。

现在失败的原因是,您将暂停状态更改为false并在第一个if语句完成后立即检查!paused。当你刚把它改成假时,那就是真的。

要修复它,如果暂停的变量是布尔值,您可以使用else if (!paused)语句或仅使用普通else

这样的事情:

- (IBAction)pause:(id)sender {

    if(paused){
        [self.progressBar resumeLayer];
        paused = false;
        NSLog(@"resume");
    } else {
        [self.progressBar pauseLayer];
        paused = true;
        NSLog(@"pause");
    }
}

答案 4 :(得分:0)

1) Declare first BOOL variable in @interface ViewController ()
Ex. bool start;
2) Initialize BOOL variable in viewDidLoad method Like this start = YES;
3) now write code in button Action Like this

- (IBAction)btnPause:(UIButton *)btn {
    if (start == YES)
    {
        btn.backgroundColor = [UIColor blackColor];
        start = NO;
    }
    else
    {
        btn.backgroundColor = [UIColor whiteColor];
        start = YES;
    }
}

// Its change button background color but you can use your Logic.