UITableView设置一些单元格为“不可选”

我如何设置UITableView的单元属性是不可选的? 当用户点击单元格时,我不想看到蓝色的select框。

将表格单元格的selectionStyle属性设置为UITableViewCellSelectionStyleNone 。 这应该防止突出显示,你也可以检查你的tableView:didSelectRowAtIndexPath:属性。

防止行select

为了完全阻止UITableViewCellselect,让你的UITableViewDelegate实现tableView:willSelectRowAtIndexPath: 如果您不想要select该行,则可以返回nil

 - (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path { // Determine if row is selectable based on the NSIndexPath. if (rowIsSelectable) { return path; } return nil; } 

这可以防止被选中的行和tableView:didSelectRowAtIndexPath:被调用。 但请注意,这并不妨碍该行被突出显示。

防止行突出显示

如果您想要防止在触摸时突出显示行,可以确保将单元格的selectionStyle设置为UITableViewCellSelectionStyleNone ,或者最好是让UITableViewDelegate实现tableView:shouldHighlightRowAtIndexPath:如下所示:

 - (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { // Determine if row is selectable based on the NSIndexPath. return rowIsSelectable; } 

用这个:

 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

仅适用于iOS 6+。

你可以在你的委托中实现tableView:shouldHighlightRowAtIndexPath:方法。 阅读更多: http : //developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

有这个问题,也尝试了一切已经提到。 在select表格单元时摆脱了“蓝色闪光”的最后一招是增加了这一行:

 self.myTableView.allowsSelection = NO; 

不知道这是一条线还是一切组合,但是总的来说,我没有更多的蓝色select,甚至是蓝色的闪光。 快乐!

设置cell.userinteractionenabled = FALSE;

使用IB也是一种优雅的方式:

在这里输入图像说明

苹果说,你应该在didSelectRowAtIndexPath中做的第一件事是取消select该行

 [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO]; 

然后,您可以将AccessoryType更改为复选标记或无等。因此,当您inputdidSelectRowAtIndexPath时,您可以取消select该行,并且如果它不意味着被选中,则不检查该行。

表视图编程指南

另一种方法是将几个类别的方法添加到UITableViewCell 。 我喜欢这个比塞巴斯蒂安更好(也是好),因为我build立我的表的方式。 我认为这可能对别人有帮助。

 - (void)setSelectable:(BOOL)enabled { [self setSelectionStyle:UITableViewCellSelectionStyleNone]; [self setUserInteractionEnabled:enabled]; } - (BOOL)isSelectable { BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone && [self isUserInteractionEnabled]; return ! disabled; } 

如果您在Interface Builder中devise了单元格,您可以通过从“ User Interaction Enabled ”中删除tableViewCell的checkbox来完成此操作

还有一种简单的方法可以避免select显示为蓝色。

select一个你不想显示为蓝色的单元格。

然后select属性检查器(侧面的属性视图上的标尺图标旁边的盾牌图标)。

然后将“select”字段从“蓝色”更改为“无”。

请注意,大概这仍然是select,它只是不会显示为选中,如果你只是想避免的UI效果。

使用tableView:willDisplayCell:forRowAtIndexPath:而不是tableView:didSelectRowAtIndexPath:摆脱第一次触摸单元格时出现的闪光。

 - (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.selectionStyle = UITableViewCellSelectionStyleNone; } 

为了使某些行不被选中,你必须对UITableView委托的两个方法做一些改变。

在下面的方法

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

在分配完单元之后,写下面的代码

 if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone; 

上面的代码将防止突出显示单元格,如果不知何故用户试图select。

在下面的这个委托方法中

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; if(indexPath.row == someCellNumber) return; //for other cells write the code below... } 

如果你不写if(indexPath.row == someCellNumber) return; 行仍然会被选中,并有可能导致应用程序崩溃