重新加载表格视图和触摸手势

问题描述

| 我有一个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