使用performSelector:withObject:afterDelay:在UIButton操作中

时间:2013-02-14 10:18:12

标签: iphone ios objective-c ipad

我正在使用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
     }
}

2 个答案:

答案 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。