当您在UITableView
点击一行时,该行将突出显示并被选中。 是否可以禁用此功能,因此点击一行什么都不做?
#1楼
从UITableViewDelegate
协议,您可以使用方法willSelectRowAtIndexPath
,如果您不想选择行,则return nil
。
以同样的方式,您可以使用willDeselectRowAtIndexPath
方法,如果您不希望取消选择该行,则return nil
。
#2楼
试试这个
cell.selectionStyle = UITableViewCellSelectionStyleNone;
和
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
您还可以使用interfacebuilder设置选择样式。
#3楼
对我来说,以下工作正常:
tableView.allowsSelection = false
这意味着didSelectRowAt#
根本不起作用。 也就是说,触摸桌子的一排,就这样,绝对不会做任何事情。 (因此,显然,永远不会有选定的动画。)
(注意,如果在单元格上,你有UIButton
或任何其他控件,当然这些控件仍然可以工作。你碰巧在表格单元格上有任何控件,与UITableView允许你“选择一行”的能力完全无关“使用didSelectRowAt#
。)
另一点需要注意的是:当UITableView
处于编辑模式时,这不起作用。 要在编辑模式下限制单元格选择,请使用以下代码:
tableView.allowsSelectionDuringEditing = false
#4楼
从iOS 6.0开始, UITableViewDelegate
有tableView:shouldHighlightRowAtIndexPath:
. (在iOS 文档中阅读它。)
此方法允许您将特定行标记为不可突出(并且隐式,不可选),而无需更改单元格的选择样式,使用userInteractionEnabled = NO
处理单元格的事件处理,或此处记录的任何其他技术。
#5楼
如果您希望选择仅闪光,而不是保持在选定状态,您可以打电话
didSelectRowAtIndexPath
下列
[tableView deselectRowAtIndexPath:indexPath animated:YES];
所以它会闪烁所选状态并恢复。
#6楼
我一直在与这个相当激烈的斗争,在我的UITableViewCell
控制禁止使用userInteractionEnabled
属性。 我有一个3单元静态表用于设置,2有日期,1有一个开/关开关。 在Storyboard / IB中玩完之后,我设法使底部不可选,但是当你点击它时,顶部行之一的选择消失了。 这是我的设置UITableView的WIP图像:
如果点击第3行什么都没发生,选择将保留在第二行。 该功能实际上是Apple日历应用程序的添加事件时间选择屏幕的副本。
代码令人惊讶地兼容,一直到IOS2 = /:
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
这与将选择样式设置为none一起使用,因此单元格不会在触摸事件上闪烁
#7楼
禁用UItableviewcell的突出显示
cell.selectionStyle = UITableViewCellSelectionStyleNone;
并且不应该允许用户与单元格进行交互。
cell.userInteractionEnabled = NO;
#8楼
您还可以通过从检查器窗格中的selection
选项(UITableView属性)中选择NoSelection
来禁用界面构建器本身的行选择,如下图所示
#9楼
你可以用它
cell.selectionStyle = UITableViewCellSelectionStyleNone;
#10楼
虽然这是防止行在选择期间显示突出显示的最佳和最简单的解决方案
cell.selectionStyle = UITableViewCellSelectionStyleNone;
我还想建议偶尔有用的是简单地显示该行已被选中然后将其关闭。 这会提醒用户确认他们打算选择的内容:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
#11楼
您所要做的就是使用以下任一方法在UITableViewCell
实例上设置选择样式:
Objective-C的:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
要么
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
斯威夫特2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
Swift 3和4.x:
cell.selectionStyle = .none
此外,请确保您未在表视图委托中实现-tableView:didSelectRowAtIndexPath:
或明确排除您希望在没有操作的情况下执行它的单元格。
#12楼
您可以使用 ....
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
#13楼
您还可以将背景颜色设置为Clear以实现与UITableViewCellSelectionStyleNone
相同的效果,以防您不希望/不能使用UITableViewCellSelectionStyleNone
。
您将使用如下代码:
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];
当您为每个单元格添加额外的彩色视图时,这可能会降低您的性能。
#14楼
cell.selectionStyle = UITableViewCellSelectionStyleNone;
#15楼
您可以使用 :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
在UITableView的索引路径方法的行的单元格中。
你也可以使用:
[tableView deselectRowAtIndexPath:indexPath animated:NO];
在tableview didselectrowatindexpath方法。
#16楼
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:NO];
[cell setHighlighted:NO animated:NO];
快乐的编码!
#17楼
Objective-C的:
下面的代码段禁用突出显示但它也禁用了对
didSelectRowAtIndexPath
的调用。 因此,如果您没有实现didSelectRowAtIndexPath
那么请使用以下方法。 在创建表时应该添加此项。 这将适用于单元格内的按钮和UITextField
。self.tableView.allowsSelection = NO;
下面的代码段禁用突出显示,并且不会禁用对
didSelectRowAtIndexPath
的调用。 在cellForRowAtIndexPath
中将单元格的选择样式设置为“无”cell.selectionStyle = UITableViewCellSelectionStyleNone;
在片段下面禁用单元格上的所有内容。 这将禁用与
buttons
,textfields
的交互:self.tableView.userInteractionEnabled = false;
迅速:
以下是Swift
等同于以上Objective-C
解决方案:
更换第一个解决方案
self.tableView.allowsSelection = false
更换第二种解决方案
cell?.selectionStyle = UITableViewCellSelectionStyle.None
更换第三种解决方案
self.tableView.userInteractionEnabled = false
#18楼
如果有人需要Swift的答案:
cell.selectionStyle = .None
#19楼
您也可以从故事板中进行操作。 单击表视图单元格,然后在“表视图单元格”下的属性检查器中,将“选择”旁边的下拉列表更改为“无”。
#20楼
1-您所要做的就是使用以下任一方法在UITableViewCell
实例上设置选择样式 :
Objective-C的:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
要么
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
斯威夫特2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
斯威夫特3:
cell.selectionStyle = .none
2 - 不要实现 - tableView:didSelectRowAtIndexPath:
在表视图中delegate
或明确排除您希望不执行任何操作的单元格。
3 - 此外,您还可以从故事板中进行操作。 单击表视图单元格,然后在“表视图单元格”下的属性检查器中,将“选择”旁边的下拉列表更改为“无”。
4 - 您可以使用(iOS) Xcode 9,Swift 4.0中的以下代码禁用表格单元格高亮显示
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
cell.selectionStyle = .none
return cell
}
#21楼
这是我用的,在cellForRowAtIndexPath
写这段代码:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
#22楼
我正在使用它,这对我有用。
cell?.selectionStyle = UITableViewCellSelectionStyle.None
#23楼
您只需将此代码放入cellForRowAtIndexPath即可
要禁用单元格的选择属性:(在点击单元格时)。
cell.selectionStyle = UITableViewCellSelectionStyle.None
#24楼
在属性检查器的UITableViewCell
的XIB中,将Selection
值设置为None
。
#25楼
SWIFT的固定解决方案3
cell.selectionStyle = .none
#26楼
直接禁用将TableViewCell突出显示到故事板中
#27楼
尝试输入:
cell.selected = NO;
它会在需要时取消选择您的行。
在Swift3中......
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let r = indexPath.row
print("clicked .. \(r)")
tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}
#28楼
根据我自己的实施经验总结我认为正确的答案:
如果要禁用某些单元格的选择,请使用:
cell.userInteractionEnabled = NO;
除了阻止选择之外,这还会阻止tableView:didSelectRowAtIndexPath:为已设置它的单元格调用。 (感谢Tony Million的回答,谢谢!)
如果您的单元格中有按钮需要单击,则需要改为:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
你还需要忽略对单元格的任何点击- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
。
如果要禁用整个表的选择,请使用:
tableView.allowsSelection = NO;
(感谢Paulo De Barros,谢谢!)
#29楼
因为我最近阅读了这篇文章,它帮助了我,我想发布另一个答案来巩固所有答案(后代)。
因此,根据您所需的逻辑和/或结果,实际上有5种不同的答案:
1.要禁用蓝色突出显示而不更改单元格的任何其他交互:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
当我在UITutViewCell中托管UIButton或其他控件时,我使用它,我希望用户能够与控件交互,但不能与单元本身交互。
注意 :正如Tony Million上面提到的,这不会阻止tableView:didSelectRowAtIndexPath:
.我通过简单的“if”语句解决这个问题,通常测试该部分并避免对特定部分采取措施。
我想要测试这样一个单元格的另一种方法是:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// A case was selected, so push into the CaseDetailViewController
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
// Handle tap code here
}
}
2.要对整个表格执行此操作,您可以将上述解决方案应用于表格中的每个单元格,但您也可以这样做:
[tableView setAllowsSelection:NO];
在我的测试中,这仍然允许UITableViewCell
内的控件是交互式的。
3.要使单元格为“只读”,您可以简单地执行此操作:
[cell setUserInteractionEnabled:NO];
4.使整个表格“只读”
[tableView setUserInteractionEnabled:NO];
5.要在运行中确定是否突出显示一个单元格(根据此答案隐式包含选择),您可以实现以下UITableViewDelegate
协议方法:
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
#30楼
我们可以写代码
cell.selectionStyle = UITableViewCellSelectionStyleNone;
但是当我们在线上方有自定义单元格xib时 ,会给出警告
自定义单元格xib
我们需要在界面构建器中设置选择样式None
来源:CSDN
作者:asdfgh0077
链接:https://blog.csdn.net/asdfgh0077/article/details/103489502