禁用UIControl一段时间

时间:2013-06-04 11:44:37

标签: ios objective-c

我可以短时间禁用按钮吗?我有一个注册视图,在3次错误尝试时它会将用户带到注册视图之外,它将禁用注册按钮一段时间,比如说5分钟。有可能吗?

6 个答案:

答案 0 :(得分:5)

- (void) processAfterWrongAttempts {
    button.enabled = NO;

    double delayInSeconds = 5.0 * 60;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *   NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        button.enabled = YES;
    });
}

答案 1 :(得分:2)

您可以使用Grand Central Dispatch。 GCD是你的朋友。

它的工作方式是您将在一定时间后请求执行某段代码。

我们假设myButton是您要停用的按钮,然后仅在特定时间后启用,numTries是您尝试注册的次数:

在您的标头文件中:

@property (nonatomic, assign) int numTries;

在您的实现(.m)文件中:

@synthesize numTries = numTries_;


- (IBAction)buttonClicked:(id)sender {
    self.numTries++;
    if (self.numTries > 3) {
        myButton.enabled = NO;
        double delayInSeconds = 15.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^{
            myButton.enabled = YES;
            numTries = 0;
        });
    }
}

这将导致15秒后执行该代码块。您当然可以将delayInSeconds更改为您希望的任何值。 dispatch_get_main_queue()返回UI线程,这意味着块^{ ... }中的代码在UI线程上执行。

答案 2 :(得分:1)

然后禁用注册按钮, 安排NSTimer 5分钟。

[NSTimer scheduledTimerWithTimeInterval:300.0f target:self selector:@selector(showSignUpButton:) userInfo:nil repeats:NO];

-(void)showSignUpButton:(NSTimer *)timer
{ 
    [signUpButton setEnabled:YES];
}

答案 3 :(得分:0)

是的,您可以根据需要禁用按钮。之后,你可以拨打计时器5分钟。当计时器开火时你可以启用那个按钮..

答案 4 :(得分:0)

为什么不使用这个

- (void) startTimer {
   [NSTimer scheduledTimerWithTimeInterval:1 
                                    target:self 
                                  selector:@selector(enable) 
                                  userInfo:nil
                                   repeats:NO];
}

- (void) enable {
   [signUpButton setEnabled:YES];

}

更好的解决方案是使用performSelector而不是scheduledTimerWithTimeInterval

 [self performSelector:@select(enable) withObject:nil afterDelay:3.0];

答案 5 :(得分:0)

//Disable button at start
[self performSelector:@select(showButton) withObject:nil afterDelay:5.0];
//write enable button code in showButton method

其他方式是

[self performBlock:^{ 
  //enable button
  } afterDelay:5.0f];