如何将UITableView的单元格属性设置为不可选?当用户点击单元格时,我不希望看到蓝色选择框。
答案 0 :(得分:193)
要完全阻止选择UITableViewCell
,请使用UITableViewDelegate
实施tableView:willSelectRowAtIndexPath:
。如果您不希望选择该行,则可以从该方法返回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;
}
答案 1 :(得分:151)
将表格单元格的selectionStyle
属性设置为UITableViewCellSelectionStyleNone
。这应该可以防止它突出显示,您还可以在tableView:didSelectRowAtIndexPath:
。
答案 2 :(得分:16)
使用它:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
答案 3 :(得分:11)
仅适用于iOS 6+。
您可以实施该方法
您的代表中tableView:shouldHighlightRowAtIndexPath:
。
在此处阅读更多内容:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
答案 4 :(得分:8)
也有这个问题,尝试过已经提到的一切。在选择表格单元时摆脱“蓝色闪光”的最后一招是添加这一行:
self.myTableView.allowsSelection = NO;
不确定是这一行还是一切都结合在一起,但作为总体结果,我不再获得蓝色选择甚至蓝色闪光。快乐!
答案 5 :(得分:7)
设置cell.userInteractionEnabled = NO;
答案 6 :(得分:5)
使用IB也是一种优雅的方式:
答案 7 :(得分:3)
Apple说你应该在didSelectRowAtIndexPath中做的第一件事是取消选择行
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
然后您可以将AccessoryType更改为复选标记,或者不将其更改为等等。因此,当您输入didSelectRowAtIndexPath时,您可以取消选择该行,如果不想选择该行,则只需不要检查该行。
答案 8 :(得分:3)
另一种方法是向UITableViewCell
添加几个类别方法。我比Sebastians(也很好)的回答更喜欢这个,因为我正在建造我的桌子。我认为这可能对其他人有帮助。
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
答案 9 :(得分:1)
如果您在Interface Builder中设计了单元格,则可以通过从启用用户交互'中删除复选框来执行此操作。对于tableViewCell
。
答案 10 :(得分:1)
斯威夫特4:
您可以使用UITableViewDelegate阻止选择和突出显示: shouldHighlightRowAt
本答案假定您创建了一个名为 CustomTableViewCell 的自定义单元格
您在该自定义单元格中创建了一个布尔值: isSelectable
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
这是Sebastian Celis的回答的Swift版本。
答案 11 :(得分:0)
还有另一种简单的方法可以避免选择显示为蓝色。
选择您不希望显示为蓝色的单元格。
然后选择属性检查器(侧面属性视图上标尺图标旁边的盾牌图标)。
然后将“选择”字段从“蓝色”更改为“无”。
注意,大概这仍然是选择,如果你想要的只是避免UI效果,它就不会显示为选中状态。
答案 12 :(得分:0)
要取消选择某行,您必须在UITableView委托的两个方法中进行一些更改。
在下面的方法中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
分配完单元后,写下面的代码
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
如果用户试图以某种方式选择,上面的代码将阻止突出显示单元格。
在下面的委托方法中
- (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;
行仍然会被选中并且有可能发生应用程序崩溃
答案 13 :(得分:0)
使用tableView:willDisplayCell:forRowAtIndexPath:而不是tableView:didSelectRowAtIndexPath:来摆脱第一次触摸单元格时出现的闪光。
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
答案 14 :(得分:0)
在细胞类中:
selectionStyle = .none
答案 15 :(得分:0)
雨燕5
cell.isUserInteractionEnabled = false