我正在尝试实现“设置页面”,例如左侧是表格视图的分割视图,右侧是图像视图。一切都很好,但如果尝试更快地点击它,表视图单元格触摸会有延迟。 DidSelectRowAtIndex
路径未被调用但单元格闪烁。
我尝试了什么,
将图像更改逻辑从willSelectRowAtIndexPath
DidSelectRowAtIndex
从委托方法中删除了所有内容(以检查是否由于加载而导致 (图片)
如何解决此有线问题?
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]];
}
答案 0 :(得分:2)
UITableViews是UIScrollViews的子类,默认情况下启用delaysContentTouches
。这是因为在允许触摸转到其子视图之前,UIScrollView会尝试确定触摸是否是滑动手势或滚动操作的一部分。如果您确实要禁用该操作,可以将表视图的delaysContentTouches
设置为NO。这可能会使滚动行为有点奇怪,因为点击将立即转到您的表格视图的单元格。您可能会发现您实际上更喜欢延迟触摸操作而不是非延迟触摸操作。
编辑 Clement说他已经尝试过了,所以这是另一个想法。
在发布的代码中,您至少在初始时从磁盘(imageNamed:
)加载这些图像。 UIKit可能会做一些缓存。如果您的教程图像非常大,那么可能没有太多可以更快地加载它们,因此请提前加载它们。您可以使用相同的[dic valueForKey:TUTORIAL_IMAGE]
键加载所有图像并将它们放入字典中。然后在tableView:didSelectRowAtIndexPath:
中,您可以将_tutorialImageView.image
设置为字典中的一个(已加载的)图像。
答案 1 :(得分:0)
这可能是图片加载代码。我在这里有两个建议:
一个。如果图像不是太多,您可以加载它们并将它们缓存在NSArray中。例如。
湾如果考虑内存,我建议首先显示占位符图像和/或UIActivityIndicator,然后将主图像加载到主线程的单独线程中。