我遇到了一个非常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,那么它运行正常......为什么会这样?
谢谢!
答案 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.