我可以短时间禁用按钮吗?我有一个注册视图,在3次错误尝试时它会将用户带到注册视图之外,它将禁用注册按钮一段时间,比如说5分钟。有可能吗?
答案 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];