UITableView设置一些单元格为“不可选”
我如何设置UITableView的单元属性是不可选的? 当用户点击单元格时,我不想看到蓝色的select框。
将表格单元格的selectionStyle
属性设置为UITableViewCellSelectionStyleNone
。 这应该防止突出显示,你也可以检查你的tableView:didSelectRowAtIndexPath:
属性。
防止行select
为了完全阻止UITableViewCell
select,让你的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;
行仍然会被选中,并有可能导致应用程序崩溃