手动调用UIRefreshControl并使用setContentOffset

时间:2018-02-14 10:41:44

标签: objective-c uirefreshcontrol

我已经在viewDidLoad()中实现了refreshControl,如下所示:

refreshControl = [[UIRefreshControl alloc] init];
if (@available(iOS 10.0, *)) {
    self.tableView.refreshControl = refreshControl;
} else {
    [self.tableView addSubview:refreshControl];
}

现在我提出另一个viewController,它有选择过滤器的选项。选择这些过滤器后,您将再次返回当前具有refreshControl的viewController。

我在viewDidAppear()中添加了以下代码,用于手动调用beginRefreshing:

if (self.filterChanged) {
    self.filterChanged = NO;
    [self.activityTableView setContentOffset:CGPointMake(0, - refreshControl.frame.size.height) animated:YES];
    [refreshControl setHidden:NO];
    [refreshControl beginRefreshing];
}

我已经使用setContentOffset滚动回顶部并显示了refreshControl。 唯一的问题是假设我的tableView在两者之间滚动了一半,那么refreshControl之间存在很大的差距。

如果我的tableView没有滚动,那么它就像我已经下拉刷新一样正常工作,但如果它是半滚动的话,那么尽管给出了setContentOffset,但是在refreshControl和tableview之间存在很大差距。

1 个答案:

答案 0 :(得分:0)

您需要等待滚动完成才能开始刷新。不幸的是WHERE col1 + col2 = 'hola mundo'上没有完成功能块,所以试试吧。

创建刷新控件后,设置目标并创建相应的方法。

setContentOffset

[_refreshControl addTarget:self action:@selector(refreshRequested) forControlEvents:UIControlEventValueChanged]; - (void)refreshRequested { [_activityTableView reloadData]; } 中,滚动到顶部并在完成时刷新。

viewDidAppear

完成加载后,您需要结束刷新并确保滚动回零位置。

[UIView animateWithDuration:0.25 delay:0 options:0 animations:^(void){        
    self.activityTableView.contentOffset = CGPointMake(0, -self.refreshControl.frame.size.height);
} completion:^(BOOL finished){
    [self.refreshControl beginRefreshing];
    [self refreshRequested];
}];