Uitableview 再次拉动时,UIRefreshControl会出现多次

Uitableview 再次拉动时,UIRefreshControl会出现多次,uitableview,pull-to-refresh,uirefreshcontrol,Uitableview,Pull To Refresh,Uirefreshcontrol,我在我的表视图中有一个UIRefreshControl,当我拉它时,服务被调用。问题是,若我拉了一次is,服务被调用,同时,我再次拉它,我会看到另一个刷新控件 以下是我用来定义刷新控制的代码: // Pull To Refresh Code UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; [refreshControl addTarget:self action:@selector(handleRefresh

我在我的
表视图中有一个
UIRefreshControl
,当我拉它时,服务被调用。问题是,若我拉了一次is,服务被调用,同时,我再次拉它,我会看到另一个刷新控件

以下是我用来定义刷新控制的代码:

// Pull To Refresh Code
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
[self.myTableView addSubview:self.refreshControl];
我的
handleRefresh
方法:

-(void) handleRefresh:(UIRefreshControl *) refreshControl{
    [self performSelector:@selector(updateBlogList)];
}
在我的
updateBlogList
方法中,我正在调用我的服务,当我得到响应时,我使用
[self.refreshControl endRefreshing]

若我在这行执行之前再次拉,屏幕上基本上有两个刷新控件


我怎样才能修好它

每次拉动时,您都会使用该行创建一个新的
refreshControl

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
这就是为什么每次拉拽时都会创建一个新的拉拽,并且它也会添加到子视图中。也许您应该对其使用延迟初始化,以确保如果对象已经创建,则不会创建新对象:

if (self.refreshControl == nil) {
    self.refreshControl = [[UIRefreshControl alloc] init];
}
通过这种方式,它会立即分配给属性,因此不需要
self.refreshControl=refreshControl

或者,您可以设置一个标志,并在调用
[self.refreshControl endRefreshing]
时将其取消设置,如果设置了该标志,则根本不会执行拉入刷新代码