如何突出显示 UITableView 中的一行
Posted
技术标签:
【中文标题】如何突出显示 UITableView 中的一行【英文标题】:How to highlight a row in a UITableView 【发布时间】:2010-12-23 12:23:13 【问题描述】:下面的代码似乎没有效果。我希望它以与点击一行时突出显示的方式相同的方式突出显示
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
...
[cell.textLabel setHighlighted:YES];
return cell;
【问题讨论】:
这个post 可能会有所帮助。 【参考方案1】:此行将为您处理单元格、标签和附件的重绘:
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
【讨论】:
【参考方案2】:正如其他人所指出的,您可以使用此方法以编程方式选择单元格:
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
但是,您应该小心不要过早调用此方法。
包含tableView
的视图控制器第一次是initialized
,最早应该在viewDidAppear:
内调用该方法。
所以,你应该这样做:
- (void)viewDidAppear:(BOOL)animated
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; // set to whatever you want to be selected first
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
如果您尝试将此调用放入 viewDidLoad
、viewWillAppear:
或任何其他早期视图生命周期调用中,它可能无法正常工作或产生奇怪的结果(例如滚动到正确的位置但未选择单元格)。
【讨论】:
在 ios 9 上似乎可以在viewWillApear
和 viewDidAppear
上运行,而不是在 viewDidLoad
上运行。【参考方案3】:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0];
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
通常有效
如果您使用界面生成器来构建界面,要检查的一件事是您指定了表视图控制器的视图。如果您实际上没有指定视图,则此选择消息可能无处可去。
(您可以通过在界面构建器检查器窗口中选择表视图控制器并将“视图”的出口拖动到要在其中进行选择的表视图来指定视图。
【讨论】:
【参考方案4】:- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
return YES;
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
// do something here
试试这个:)
【讨论】:
仅适用于 iOS 6 developer.apple.com/library/ios/#documentation/uikit/reference/…【参考方案5】:您可以使用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
...
[cell.textLabel setHighlighted:YES];
return cell;
【讨论】:
【参考方案6】:你有两个选择。要么使用表格视图的选择:
[tableView selectRowAtIndexPath: indexPath animated: YES scrollPosition: UITableViewScrollPositionNone];
或者改变表格视图委托中表格单元格的背景颜色:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
cell.backgroundColor = ...
【讨论】:
以上是关于如何突出显示 UITableView 中的一行的主要内容,如果未能解决你的问题,请参考以下文章