我正在UITableView
上实现UIRefreshControl
以刷新表的数据。在其他拉取刷新实现方式中,刷新过程直到用户的手指在拉取的刷新距离中被抬起才开始。UIRefreshControl看起来并不像它有这种自定义。
我的UIRefreshControl init
代码:
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
[self.tableView addSubview:refreshControl];
我的refresh:
代码是相当基本的:
- (void)refresh:(id)sender {
// Refresh code...
[sender endRefreshing];
}
如何延迟refresh:
功能,直到用户将手指从拉拽中移开?
3条答案
按热度按时间gzszwxb41#
我也遇到了同样的问题。我不认为我的方法是很好的,但似乎它的工作。
1.初始化
UIRefreshControl
1.当用户完成拖动表格时,检查
UIRefreshControl
的状态(UITableViewDelegate
符合UIScrollViewDelegate
)1.更新表
希望对你有帮助。
fumotvh32#
UIRefreshControl
已经为在“正确”的时间启动提供了便利。拖动刷新控件的正确行为是在用户超过某个“足够远”的阈值后开始刷新,而不是在用户释放拖动时。为了实现这一点,你需要修改你的
-refresh:
方法来检查控件何时转换到refreshing
状态:请注意,为
(... refresh code ...)
调用的任何方法都应该是异步的,这样UI就不会冻结。你应该切换到main queue,并在(... refresh code ...)
块的末尾调用-endRefreshing
,而不是在-refresh:
块的末尾:将控件事件更改为
UIControlEventTouchUpInside
将不起作用,因为UIRefreshControl
不是旨在与之直接交互的UI组件。用户永远不会 * 触摸 *UIRefreshControl
,因此不会触发UIControlEventTouchUpInside
事件。voase2hg3#
使用
NSRunLoop
可以实现仅在手指抬起时进行刷新。在数组中使用NSRunLoopDefaultMode
调用-(void)performInModes:(NSArray<NSRunLoopMode> *)modes block:(void (^)(void))block;
。当触摸仍然保持时,运行循环模式为
UITrackingRunLoopMode
,它只会在抬离后回到默认值。