2016-01-20 65 views
0

我陷入了一个很难理解的问题,我无法以任何方式解决问题,我确信我忽视了某些东西,但无法为神而着想!启动/停止按钮无法正常工作iOS

好的,所以我在我的应用程序中有一个开始/停止按钮,它应该在动作暂停时恢复动作,并在动作已经开始时暂停动作。这里是我的代码:

- (IBAction)pause:(id)sender { 

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

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

    } 

} 

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

编辑:如果我将其中一个if语句换成另一个if语句,它工作正常......为什么?

谢谢!

+0

你为什么不使用,而不是两个,如果别人请以暂停变量BOOL &组用YES? –

+0

因为我想知道,为什么使用if语句 –

+0

这是错误的,但是您可以评估两次条件。如果你真的想使用两个if,在第一个中加入一个return关键字,它将毫无问题地工作 –

回答

2

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

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

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

真正的无赖在你的代码当然是一个愚蠢的错误。如果暂停== YES,那么第一个if被执行,暂停被设置为NO,然后在下一次测试中检查暂停== NO - 它在这一点上。

通过逐行调试调试器中的代码,您会发现很容易。

+0

是的!我很抱歉,我忘记了如果声明被相互调用而不仅仅是第一个,如果这已经是真的,我想这就是为什么它与其他工作的情况下,如果!谢谢!对于这个愚蠢的问题感到抱歉。 –

2
- (IBAction)pause:(id)sender { 

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

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

    paused = !paused; 

} 
1

您应该检查其他国家在else块不是有两个if声明。

您现在失败的原因是,您将暂停状态更改为false,并在第一个if声明完成后,您检查!paused。这将是真实的,因为你只是将它改为false。

要解决该问题,您可以使用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"); 
    } 
} 
+0

是的,我现在明白了,谢谢! –

3

& NO

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.