我正在使用UIButton的IBAction中的[performSelector:@selector(reloadData) withObject:nil afterDelay:0.01]
,reloadData方法以特定方式在主视图上绘制一些子视图,问题是当我快速点击按钮并重复执行选择器“ReloadData”时多次,事件,虽然我取消之前对该选择器的所有请求,这导致主视图中的子视图重复
-(IBAction) myButtonIsTapped
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(reloadData) object:nil];
[self performSelector:@selector(reloadData) withObject:nil afterDelay:0.01];
}
并重新加载数据方法,如下所示:
-(void) reloadData
{
@synchronized(self){
// clear all subviews from the main view
// draw new subviews
}
}
答案 0 :(得分:3)
这个怎么样:
-(IBAction) myButtonIsTapped
{
[self.myButton setUserInteractionEnabled:NO];
[self performSelector:@selector(reloadData) withObject:nil afterDelay:0.01];
}
-(void) reloadData
{
// Long task...
// Enable the button again:
[self.myButton setUserInteractionEnabled:YES];
}
有时候只是更容易控制用户正在做什么(UI),而不是逻辑地处理他所做的事情。
答案 1 :(得分:0)
做一件事创建一个BOOL variable
并设置viewdidload
是并检查函数是否为是,然后方法调用,并在按钮制作方法中为no。