如何解决重新加载表格视图和触摸手势
| 我有一个tableview,正在使用[tableview reloadData];
在添加新内容时重新加载
问题是我在Table的TableCells上有一个UILongPressGestureRecognizer,并且由于单元格/表的重新加载很频繁,因此LongPress并不总是有时间工作,我想这是在单元格时重置了内部计时器/ table正在重新加载。
解决方法
在调用
[tableView reloadData]
之前,您是否尝试过查看UILongPressGestureRecognizer
的状态?例如:
// Returns |YES| if a gesture recognizer began detecting a long tap gesture
- (BOOL)longTapPossible {
BOOL possible = NO;
UIGestureRecognizer *gestureRecognizer = nil;
NSArray *visibleIndexPaths = [tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visibleIndexPaths) {
// I suppose you have only one UILongPressGestureRecognizer per cell
gestureRecognizer = [[tableView cellForRowAtIndexPath:indexPath] gestureRecognizers]
lastObject];
possible = (gestureRecognizer.state == UIGestureRecognizerStateBegan ||
gestureRecognizer.state == UIGestureRecognizerStateChanged);
if (possible) {
break;
}
}
return possible;
}
// ... later,where you reload the tableView:
if ([self longTapPossible] == NO) {
[tableView reloadData];
}
让我知道它是否有效!
, 如果要保留现有单元格,请不要使用ѭ4。取而代之的是,当您获取新数据时,请使用用于插入和删除单元格的方法来准确地通知表视图哪些单元格已更改。通用程序为:
您将获得新数据。
致电beginUpdates
调用ѭ6删除新数据中已删除的所有旧项目的单元格。
调用ѭ7,为已在新数据中添加的所有项目添加新单元格。
如果由于某种原因需要选择性地替换特定的单元格(并且不能仅用新数据更新现有单元格的子视图),请使用ѭ8。
致电commitUpdates
。此时,您的UITableViewDataSource
方法必须反映新数据(例如tableView:numberOfRowsInSection:
应该反映更改的计数,,12ѭ应该使用新项目)。
表格视图现在将根据需要调用数据源方法以更新显示。现有行将不会更改。
, 触摸单元格时,将aOLIsSelected之类的BOOL设置为YES
如果aCellIsSelected为NO,则重新加载tableview
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。