当您在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开始, UITableViewDelegatetableView: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的:

  1. 下面的代码段禁用突出显示但它也禁用了对didSelectRowAtIndexPath的调用。 因此,如果您没有实现didSelectRowAtIndexPath那么请使用以下方法。 在创建表时应该添加此项。 这将适用于单元格内的按钮和UITextField

     self.tableView.allowsSelection = NO; 
  2. 下面的代码段禁用突出显示,并且不会禁用对didSelectRowAtIndexPath的调用。 在cellForRowAtIndexPath中将单元格的选择样式设置为“无”

     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
  3. 在片段下面禁用单元格上的所有内容。 这将禁用与buttonstextfields的交互:

     self.tableView.userInteractionEnabled = false; 

迅速:

以下是Swift等同于以上Objective-C解决方案:

  1. 更换第一个解决方案

     self.tableView.allowsSelection = false 
  2. 更换第二种解决方案

     cell?.selectionStyle = UITableViewCellSelectionStyle.None 
  3. 更换第三种解决方案

     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! OpenTbCellcell.selectionStyle = .nonereturn cell}

#21楼

这是我用的,在cellForRowAtIndexPath写这段代码:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

#22楼

我正在使用它,这对我有用。

cell?.selectionStyle = UITableViewCellSelectionStyle.None

#23楼

您只需将此代码放入cellForRowAtIndexPath即可

要禁用单元格的选择属性:(在点击单元格时)。

cell.selectionStyle = UITableViewCellSelectionStyle.None

#24楼

在属性检查器的UITableViewCellXIB中,将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.rowprint("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 CaseDetailViewControllerUITableViewCell *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

如何禁用UITableView选择?相关推荐

  1. 如何禁用文本选择突出显示

    对于充当按钮的锚(例如,"堆栈溢出"页面顶部的" 问题" ," 标签" ," 用户 "等)或选项卡,是否存在CSS标准方 ...

  2. css禁用选中文本_使用CSS禁用文本选择突出显示

    css禁用选中文本 Introduction: 介绍: Texts are the most fundamental elements of any websites or web pages, th ...

  3. uitableView 选择跳过后, 跳回 颜色变化 问题

    今天遇到这个问题  谁也因此没有满足这方面的需求 今天会见 网上办理登机手续 未找到 好 我只能说自己的问题 但 幸好,kai哥 就攻克了 ! 就是在- (void)tableView:(UITabl ...

  4. ipad html 禁止放大镜,IOs Cordova长按显示文本选择放大镜即使禁用文本选择,如何删除?...

    我有一个非常奇怪的问题.在我的iOS上的cordova应用程序,当我长时间在应用程序的任何地方,我会收到一个弹出的文本选择放大镜. 例: 顶部的气泡被锁定在屏幕的顶部,当我的手指从一侧移到另一边时,按 ...

  5. css——background、border、margin、float、content、blur(图片模糊)、user-select:none(禁用用户选择复制),border-image

    1.background 缩写形式:background:color image repeat 关联方式 position: /* img1在最上面,以此类推 */background: url(~@ ...

  6. 如何为“选择”框创建占位符?

    我正在使用占位符进行文本输入,效果很好. 但是我也想为我的选择框使用一个占位符. 当然,我可以使用以下代码: <select><option value=""&g ...

  7. android 键盘 能复制,android – 从EditText中禁用软键盘,但仍允许复制/粘贴?

    经过几个小时的研究,我终于找到了适用于所有API版本的解决方案.希望这可以节省某人的时间. 如果您正在开发API> = 11,解决方案很简单: 1)在EditText的xml文件中添加以下两个属 ...

  8. css怎么更改指定字体颜色,CSS-如何更改禁用输入的字体颜色?

    CSS-如何更改禁用输入的字体颜色? 我需要更改CSS中禁用的输入元素的样式. 我该如何针对Internet Explorer? 10个解决方案 46 votes 您不能使用Internet Expl ...

  9. 如何为项目中的单个文件禁用ARC?

    我在项目中成功使用了ARC. 但是,我遇到了一些文件(例如,在单元测试和模拟对象中),其中ARC规则现在更加脆弱. 我记得曾经听说有一种方法可以按文件禁用ARC,尽管我一直找不到该选项. 这可能吗? ...

最新文章

  1. 算一算你的语言价值几何
  2. Jenkins加Shell实现最简单的持续部署
  3. stdio.h iostream.h iostream 三者
  4. h5精准定位_HTML5 地理定位
  5. 安装.net5.0后怎么在vs里选择_Visual Stdio 2019(或其它版本)怎样全部安装到非系统盘的实现方法(小白版)...
  6. mysql error 1231_解决ERROR 1231 (42000): Variable 'time_zone' can't
  7. python序列5位置_Python序列构成的数组
  8. Codeforces-808D Array Division (multiset 折半???)
  9. OpenCV-python学习笔记(六)——梯度算子,边缘检测和轮廓提取
  10. .NET——NPOI操作excel
  11. css3 rem的用法
  12. 现在电脑的主流配置_2019~2020电脑配置清单主流配件(下)
  13. hadoop测试环境完全分布式安装配置
  14. JS中原型和原型链的详细讲解(附代码示例)以及 new关键字具体做了什么的详细讲解
  15. GitHub中国区前100名到底是什么样的人?
  16. weak_ptr介绍
  17. 九宫格(安卓手机的图形锁有几种解锁图案)
  18. QML 中如何动态创建组件
  19. PostgreSQL助力小微企业管理系统变革
  20. SSRS 2008 冻结首行

热门文章

  1. getDimension/getDimensionPixelSize/getDimensionPixelOffset()
  2. Android Jetpack组件之Hilt使用
  3. Mybatis错误:Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]
  4. Android之实现上下左右翻页效果
  5. 数据算法——Spark的TopN实现
  6. Zookeeper知识汇总
  7. SpringSecurity过滤器链汇总
  8. oracle建表权限问题和JSP连接oracle数据库基本操作
  9. 喵哈哈村的魔法考试 Round #5 (Div.2) C
  10. shell基础知识总结