禁用计时器iOS上的按钮

时间:2015-12-13 13:00:06

标签: ios objective-c nstimer

我正在使用Objective-C在XCode 7上创建一个计时器应用程序,我想在执行以下代码时禁用连接到操作char **array = NULL ; array = malloc( 2 * sizeof( char * ) ) ; array[0] = malloc( 24 ) ; array[1] = malloc( 11 ) ; strcpy( array[0], "first" ) ; strcpy( array[1], "second" ) ; printf( "%s\n%s\n", array[0], array[1] ) ; /* swap the rows */ char *t = array[0] ; array[0] = array[1] ; array[1] = t ; printf( "%s\n%s\n", array[0], array[1] ) ; free( array[0] ) ; free( array[1] ) ; free( array ) ; 的按钮

startCount

我需要添加哪些代码才能停用与操作- (IBAction)startCount:(id)sender { countInt = 0; self.Label.text = [NSString stringWithFormat:@"%i", countInt]; timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countTimer) userInfo:nil repeats:YES]; } 相关联的按钮?

由于

2 个答案:

答案 0 :(得分:1)

您需要通过enabled标记disable发件人:

((UIButton*)sender).enabled = false;

计时器结束后不要忘记重新启用按钮。

  

如果启用状态为NO,则控件忽略触摸事件[...]

除了我在上面的代码中所做的演员之外:更改你的方法签名以获取UIButton*,而不仅仅是一个id,这样你就可以确保演员不会失败。施法者的轻微变化将转而投射到UIControl*

答案 1 :(得分:0)

如果我理解正确:为了让您的代码更容易理解(如果有多个按钮可能被轻击/禁用,以避免不愉快的竞争条件),我建议避免使用计时器。相反,请考虑dispatch_after()这样:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    sender.userInteractionEnabled = false;
});

我们将sender传递给方法,它将是被点击的按钮。 1 * NSEC_PER_SEC表示"延迟一秒。"