按钮状态不会在循环中更改

时间:2013-02-23 10:22:30

标签: ios loops button while-loop

在我的小应用程序中,用户单击“开启”按钮然后我调用带有while循环的方法,并且应该出现“OFF”按钮,但是我的“OFF”按钮不会显示。

-(void) myMethod{

    while (_onButton.selected) {

        [self vibrate];
         NSLog(@"working");
    } 
}


- (IBAction)on:(id)sender {

    _offButton.hidden=NO;
    _offButton.selected=NO;
    _onButton.hidden=YES;
    _onButton.selected=YES;

       [self myMethod];


}

- (IBAction)off:(id)sender {

    _onButton.hidden=NO;
    _offButton.hidden=YES;
    _onButton.selected=NO;
    _offButton.selected=YES;
}

2 个答案:

答案 0 :(得分:0)

这是一个无限的循环伴侣。像这样改变while循环:

while (_onButton.selected) {

[self vibrate];
 NSLog(@"working");
_onButton.selected = NO;
}

或     while(_onButton.selected){

[self vibrate];
 NSLog(@"working");
break;
}

答案 1 :(得分:0)

当你使用这个循环时:

while (_onButton.selected) {

    [self vibrate];
     NSLog(@"working");
} 

您不允许runloop处理新事件,因此该按钮永远不会有机会更改状态(因为它不会接收来自用户的触摸)。这非常糟糕,你不应该这样做。

使用声音委托方法继续振动,这种方法一直持续选择按钮(你没有显示你的振动方式,所以我不能在这里提供更多细节)。

编辑在OP评论后发表:

- (void)vibrate
{
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
} 

好的,AudioServices通过AudioServicesAddSystemSoundCompletion()提供“完成程序”,这样您就可以在选择按钮时重放振动“声音”。使用此机制而不是while循环。