Iphone UIB按钮限制按下次数
我遇到了一个问题,用户快速按下我的UIButton,导致多个条目被放置在在线存储的数据库中。我尝试过各种方法,比如在调用操作时隐藏按钮和某种切换,但都没有成功。有没有办法限制新闻界只有一家。该操作链接到按钮上的“内部修补”参考Iphone UIB按钮限制按下次数,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我遇到了一个问题,用户快速按下我的UIButton,导致多个条目被放置在在线存储的数据库中。我尝试过各种方法,比如在调用操作时隐藏按钮和某种切换,但都没有成功。有没有办法限制新闻界只有一家。该操作链接到按钮上的“内部修补”参考 -(IBAction)postData:(id)sender { if(loginControl == 0) { if(nameIB.text.length && numberIB.text.length > 0)
-(IBAction)postData:(id)sender
{
if(loginControl == 0)
{
if(nameIB.text.length && numberIB.text.length > 0)
{
loginControl = 1;
loginButton.hidden = YES;
NSMutableData *data = [NSMutableData data];
NSString *number = numberIB.text;
NSString *name = nameIB.text;
NSString *nameString = [[NSString alloc] initWithFormat:@"name=%@", name];
NSString *numberString = [[NSString alloc] initWithFormat:@"&number=%@", number];
NSString *genderString = [[NSString alloc] initWithFormat:@"&gender=%@", gender];
//NSLog(nameString);
//NSLog(numberString);
[data appendData:[nameString dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[numberString dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:[genderString dataUsingEncoding:NSUTF8StringEncoding]];
NSURL *url = [NSURL URLWithString:@"http://www.blah.net/blah.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];
NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSLog(@"responseData: %@", responseData);
userData = responseData;
[self startParsingUserId];
logoutButton.hidden = NO;
}
else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Text Fields Empty" message:@"One Or More Textfields Are Empty" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
[alert show];
[alert release];
loginControl = 0;
}
}
}
您应该立即设置按钮的
enabled
或hidden
属性以禁用交互
但是直到运行循环的下一轮,当所有内容都重新绘制时,更改才会生效。当你的代码运行时,你的代码正在隐藏按钮,做一些事情,然后取消隐藏按钮,所有这些都是在按钮有机会重新绘制之前完成的
您应该做的是设置hidden
属性,然后开始计算(最好是在后台线程上)。一旦且仅在计算完成后,您应该向主线程发出信号,再次取消隐藏按钮
如果您同意仅在iOS 4.0+上使用此功能,您可以通过Grand Central Dispatch轻松完成此功能:
- (IBAction)doStuff:(id)sender {
[button setEnabled:NO];
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do all your computation/synchronous requesting here
// this will happen on a background thread
dispatch_async(dispatch_get_main_queue(), ^{
[button setEnabled:YES];
});
});
}
您应该立即设置按钮的
enabled
或hidden
属性以禁用交互
但是直到运行循环的下一轮,当所有内容都重新绘制时,更改才会生效。当你的代码运行时,你的代码正在隐藏按钮,做一些事情,然后取消隐藏按钮,所有这些都是在按钮有机会重新绘制之前完成的
您应该做的是设置hidden
属性,然后开始计算(最好是在后台线程上)。一旦且仅在计算完成后,您应该向主线程发出信号,再次取消隐藏按钮
如果您同意仅在iOS 4.0+上使用此功能,您可以通过Grand Central Dispatch轻松完成此功能:
- (IBAction)doStuff:(id)sender {
[button setEnabled:NO];
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do all your computation/synchronous requesting here
// this will happen on a background thread
dispatch_async(dispatch_get_main_queue(), ^{
[button setEnabled:YES];
});
});
}
在按钮的选择器中,使用运行一段代码以禁用按钮,直到方法的逻辑完成。在按钮的选择器中,使用运行一段代码以禁用按钮,直到方法的逻辑完成。您能帮我解决类似的问题吗?你能帮我解决一个类似的问题吗?