2013-03-25 96 views
0

我试图实现一个'设置页面'的分隔视图,左侧为一个表视图,右侧为一个图像视图。一切都很好,但如果尝试更快地点击它,则表格视图单元格触摸会出现延迟。 DidSelectRowAtIndex路径没有被调用,但单元格闪烁。UITableViewCell触摸响应的延迟

我已经试过,

  1. 移动影像变更逻辑为willSelectRowAtIndexPathDidSelectRowAtIndex

  2. 去除一切从委托方法(来检查它是否是由于图像的加载 )

我该如何解决这条线问题?

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

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

编辑克莱门特说他已经试过了,所以这里有另一个想法。

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

+0

它已被设置为否在界面生成器中,我甚至试图把它放在'viewdidload'中,但行为没有变化。 – 2013-03-25 06:38:57

+0

@Clement好的,编辑中的新建议。另外,你有没有尝试用仪器分析这个代码?如果它确实是一个性能问题,它将有助于了解最重的回溯。 – 2013-03-25 06:51:09

+0

谢谢。我尝试了你的建议 – 2013-03-25 07:14:13

0

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

a。如果图像不是太多,你可以加载它们并将它们缓存在NSArray中。

b。如果内存是一个问题,我建议首先显示一个占位符图像和/或一个UIActivityIndi​​cator,然后将主图像加载到离开主线程的单独线程中。