延迟UITableViewCell触摸响应

时间:2013-03-25 06:19:34

标签: ios ipad uitableview

我正在尝试实现“设置页面”,例如左侧是表格视图的分割视图,右侧是图像视图。一切都很好,但如果尝试更快地点击它,表视图单元格触摸会有延迟。 DidSelectRowAtIndex路径未被调用但单元格闪烁。

我尝试了什么,

  1. 图像更改逻辑从willSelectRowAtIndexPath

  2. 移至DidSelectRowAtIndex
  3. 从委托方法中删除了所有内容(以检查是否由于加载而导致     (图片)

  4. 如何解决此有线问题?

    TableDatasource

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        {
            static NSString *cellIdentifier = @"tutorialCell";
            CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
            if (cell == nil) {
                NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TutorialTableCell" owner:nil options:nil];
                cell = [nib objectAtIndex:0];        
            }
            NSDictionary * dic = [dictArray objectAtIndex:indexPath.row];
            cell.tutorialText.text = [dic valueForKey:TUTORIAL_TEXT];
            cell.tutorialImage.image = [UIImage imageNamed:[dic valueForKey:TUTORIAL_ICON]];
            cell.contentView.backgroundColor = [UIColor colorWithHex:@"#36393D" alpha:1.0];
            UIView *bgColorView = [[UIView alloc] init];
            [bgColorView setBackgroundColor:[UIColor colorWithHex:@"#1f1f1f" alpha:1.0]];
            [cell setSelectedBackgroundView:bgColorView];
            return cell;
        }
    

    TableView代表

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSDictionary * dic = [dictArray objectAtIndex:indexPath.row];
        _tutorialImageView.image = [UIImage imageNamed:[dic valueForKey:TUTORIAL_IMAGE]];
    }
    

2 个答案:

答案 0 :(得分:2)

UITableViews是UIScrollViews的子类,默认情况下启用delaysContentTouches。这是因为在允许触摸转到其子视图之前,UIScrollView会尝试确定触摸是否是滑动手势或滚动操作的一部分。如果您确实要禁用该操作,可以将表视图的delaysContentTouches设置为NO。这可能会使滚动行为有点奇怪,因为点击将立即转到您的表格视图的单元格。您可能会发现您实际上更喜欢延迟触摸操作而不是非延迟触摸操作。

编辑 Clement说他已经尝试过了,所以这是另一个想法。

在发布的代码中,您至少在初始时从磁盘(imageNamed:)加载这些图像。 UIKit可能会做一些缓存。如果您的教程图像非常大,那么可能没有太多可以更快地加载它们,因此请提前加载它们。您可以使用相同的[dic valueForKey:TUTORIAL_IMAGE]键加载所有图像并将它们放入字典中。然后在tableView:didSelectRowAtIndexPath:中,您可以将_tutorialImageView.image设置为字典中的一个(已加载的)图像。

答案 1 :(得分:0)

这可能是图片加载代码。我在这里有两个建议:

一个。如果图像不是太多,您可以加载它们并将它们缓存在NSArray中。例如。

湾如果考虑内存,我建议首先显示占位符图像和/或UIActivityIndi​​cator,然后将主图像加载到主线程的单独线程中。