实现 Pull-to-refresh 将 UITableViewController 中的单元格向下移动
Posted
技术标签:
【中文标题】实现 Pull-to-refresh 将 UITableViewController 中的单元格向下移动【英文标题】:Implementing Pull-to-refresh shifts the cells in UITableViewController downwards 【发布时间】:2015-06-03 12:31:35 【问题描述】:我在放置 UITableViewController 并同时拉动刷新时遇到问题。
我已经实现了拉动刷新,并在实现拉动刷新时对服务器进行 API 调用,并获取数据并显示在表格视图列表中。问题是在拉动刷新时,表格从其实际位置向下移动。 下面是我的代码和截图。
viewDidLoad
refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:refreshControl];
- (void)handleRefresh:(id)sender
// do your refresh here...
[self Data];//method to get data from server
[refreshControl endRefreshing];
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:UITableViewController 有一个内置的刷新控件。您不想将新的作为子视图添加到 tableview。只需初始化self.refreshControl
。
viewDidLoad
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl setTintColor:[UIColor lightGrayColor]];
[self.refreshControl addTarget:self action:@selector(didRefresh:) forControlEvents:UIControlEventValueChanged];
- (void)didRefresh:(UIRefreshControl *)sender
[sender endRefreshing];
[self Data];
【讨论】:
谢谢,我应用了您的代码,但现在当我下拉时,表格中没有指示器视图。下拉时不调用 didRefresh 方法。 确保您没有在子类中覆盖 refreshControl。 self.refreshControl 是在 UITableViewController 中实现的,所以你不需要在你的类中声明它。 这个工作但 didRefresh 方法在下拉时调用了两次,这并没有解决我的问题。 确保没有其他东西调用刷新方法,并且您包括 [sender endRefreshing]。在 didRefresh 中放置一个断点并检查发件人。如果仍有问题,请发布一些代码。 我检查了我的代码在这个方法中: - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height; if (endScrolling >= scrollView.contentSize.height) NSLog(@"Scroll End Called");底部刷新=是; [自身数据]; where [自我数据];再次调用。以上是关于实现 Pull-to-refresh 将 UITableViewController 中的单元格向下移动的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中使用 Riverpod 实现 pull-to-refresh
如何在 UIView(不是 UITableView、UICollectionView、UIScrollView)上添加 Pull-to-refresh