触摸时我的表格单元格不会立即突出显示

Posted

技术标签:

【中文标题】触摸时我的表格单元格不会立即突出显示【英文标题】:My table cells don't highlight immediately when touched 【发布时间】:2009-07-10 22:21:55 【问题描述】:

在我的应用程序中,我有一个大约有八个单元格的表格视图。顶部有一个导航栏。当用户触摸一个单元格时,大约 1/2 秒内没有任何反应。然后被触摸的单元格突出显示为蓝色,新视图立即滑入到位。

问题在于,直到刚刚新视图滑入到位之前,用户才知道他触摸了哪个单元格。

例如,当我在 iPhone 的设置应用程序中浏览表格时,当你触摸一个单元格时,该单元格立即变成蓝色,然后有 1/2 秒的延迟,然后你查看新视图。

如何让我的表格立即获得高亮单元格的反馈?我用的是tableView didSelectRowAtIndexPath:,每个单元格都有一个附属按钮。

感谢您的任何见解。

【问题讨论】:

【参考方案1】:

您是否使用自定义绘制的单元格(带有 drawRect 覆盖)或类似的东西?

如果你有一个自定义的 drawRect 方法,你需要做这样的事情(基于 tweetie 的代码,找到 here):


//default colors for cell
UIColor *backgroundColor = [UIColor whiteColor];
UIColor *textColor = [UIColor blackColor];

//on highlight, swap colors
if(self.highlighted)
    backgroundColor = [UIColor clearColor];
    textColor = [UIColor whiteColor];

这应该给你默认行为。

【讨论】:

嗨,kolywater,我根本没有使用自定义绘制的单元格。我只是将文本分配给单元格。我真的不想负责绘制整个单元格,我正在寻找单元格在被触​​摸后突出显示延迟如此之多的原因。似乎操作系统应该处理这个问题! /史蒂夫 如果从 didSelectRowAtIndex 方法中删除所有内容,突出显示是否有效?您也可以发布您的 didSelectRowAtIndex 代码吗? 嗨,kolywater,我正在下面的帖子中回答这个问题,因为快速评论只能允许我输入 600 个字符。 遇到了同样的问题,我正在使用 ABTableViewCells。在示例中,它是 if(self.selected)。必须用 if(self.selected || self.highlighted) 替换它。谢谢!【参考方案2】:

处理完新幻灯片后,听起来屏幕正在刷新。您需要在渲染新的幻灯片视图之前刷新屏幕。

【讨论】:

嗨,罗伯特,感谢您的回复。我是一个新手。如何“刷新”屏幕? /SD 显然没有我想象的那么容易:thebitsource.com/2009/04/12/… 不过,它可以做到,一些例子见这个页面:bit-101.com/blog/?p=1793 嗨,罗伯特,我有点卡住了。在我看来,我正在寻找的应该是单元格的默认操作。我不应该编写代码来突出显示选中的单元格,不是吗?我想知道是什么导致了这样的延迟。 /史蒂夫 史蒂夫,这些家伙似乎知道他们在做什么:iphonedevsdk.com/forum/iphone-sdk-development/…。我的相关经验更多地与一般用户界面有关,而与 iPhone 本身的关系不大。【参考方案3】:

一些事情:

最好在 beforeViewController 中有一个属性,这样它就可以在加载时设置自己的标题(而不是从父类中设置)。

第二,你为什么要为当前班级设置后退按钮?你也泄露了(你分配了 UIBarButtonItem 但不释放它)。


NewViewController *newViewController = [[[NewViewController alloc]
initWithNibName:@"New" bundle:nil] autorelease];
newViewController.name = [self.listData objectAtIndex:indexPath.row];
[self.navigationController pushViewController:beforeAfterViewController animated:YES]; 

然后在 NewViewController 中,你有


- (void) viewDidLoad
    self.title = self.name;

回复:您的第二个问题:如果您使用 [self.navigationController popViewControllerAnimated:YES] 弹出子控制器,则父视图应自动取消选择先前选择的行。除非您强迫它保持这种状态,否则它不应保持选中状态。

你不需要做任何类似 [self.tableView deselectRowAtIndexPath:] 的事情,除非你没有推送子视图(并且做一些事情,比如勾选用户点击的单元格)。

【讨论】:

【参考方案4】:

您可以将这两行代码放在 didSelectRowAtIndexPath 方法的开头:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:YES animated:YES];

在处理其他程序逻辑之前,它应该首先突出显示单元格。

【讨论】:

以上是关于触摸时我的表格单元格不会立即突出显示的主要内容,如果未能解决你的问题,请参考以下文章

在编辑模式下禁用表格视图单元格突出显示的颜色?

单击时突出显示表格视图单元格

用户滑动时表格视图单元格突出显示

触摸时不突出显示表格视图行

如何避免在表格视图中突出显示两个单元格?

突出显示表格视图单元格 TextLabel 文本颜色