我可以在短时间内禁用按钮吗?我有一个注册视图,在 3 次错误尝试时,它会将用户带到注册视图之外,并且会在一段时间内禁用注册按钮,比如 5 分钟。可能吗?
问问题
709 次
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
然后禁用注册按钮,安排NSTimer
5 分钟。
[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 回答