1

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

4

6 回答 6

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;
    });
}
于 2013-06-04T11:47:55.367 回答
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 线程上执行。

于 2013-06-04T11:54:28.593 回答
1

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

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

-(void)showSignUpButton:(NSTimer *)timer
{ 
    [signUpButton setEnabled:YES];
}
于 2013-06-04T11:50:11.593 回答
0

是的,您可以在需要时禁用按钮。之后,您可以调用计时器 5 分钟。以及何时触发计时器。您可以启用该按钮..

于 2013-06-04T11:46:57.223 回答
0

为什么不使用这个

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

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

}

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

 [self performSelector:@select(enable) withObject:nil afterDelay:3.0];
于 2013-06-04T12:12:22.390 回答
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];
于 2013-06-04T12:39:13.587 回答