如何禁用自定义静态 UITableViewCell 的可访问性
Posted
技术标签:
【中文标题】如何禁用自定义静态 UITableViewCell 的可访问性【英文标题】:How to disable accessibility for custom static UITableViewCell 【发布时间】:2014-05-23 08:22:36 【问题描述】:我有一个包含 UITableViewController
和静态内容的故事板。这些单元格非常简单,只包含一个UILabel
。如果我现在想禁用其中一个单元格的可访问性,我只需取消选中标签上的标记。这按预期工作。
但是,如果我现在创建一个 UITableViewCell
的空子类并将其用作我的静态单元格的单元格类,则将启用可访问性,而忽略所有设置。
我尝试覆盖-isAccessibilityElement
以返回NO
,以编程方式将所有子视图accessibilityElement
属性设置为NO
,但在使用VoiceOver 时仍然可以选择它。 VoiceOver 不会读取内容,似乎只有一个“ ”(在此元素上向上/向下滑动时可以听到)。
我需要做什么来禁用自定义单元格的可访问性?
【问题讨论】:
【参考方案1】:也许,这种方式更容易。
cell.textLabel.accessibilityElementsHidden = YES;
Look this post
;)
【讨论】:
我只是在单元格本身上设置了accessibilityElementsHidden。您甚至可以在 Interface Builder 中使用用户定义的运行时属性来实现。【参考方案2】:好的,我找到了解决方案,虽然我对此并不满意。
要禁用单元格作为可访问性元素,您需要将其变成不带任何元素的可访问性容器:
@implementation CustomCell
- (BOOL)isAccessibilityElement
return NO; // prerequisite for being an accessibility container
- (NSInteger)accessibilityElementCount
return 0; // hack to disable accessibility for this cell
- (id)accessibilityElementAtIndex:(NSInteger)index
return nil;
- (NSInteger)indexOfAccessibilityElement:(id)element
return NSNotFound;
@end
【讨论】:
【参考方案3】:在斯威夫特中
*示例代码是 Swift 3,但设置 accessibilityElementsHidden
的关键代码行不是 Swift 3 特定的。
在显示单元格(UITableViewCell)之前,必须将单元格的accessibilityElementsHidden 属性设置为true
。此属性指示包含在可访问性元素(在本例中为单元格)中的可访问性元素是否隐藏。 accessibilityElementsHidden
默认为false
。
在 init() 中
以下代码将在自定义 UITableViewCell 子类中初始化时设置 accessibilityElementsHidden
true
。如果单元格是由故事板、nib 创建或以编程方式创建的,这将起作用。
class CustomTableViewCell: UITableViewCell
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: UITableViewCellStyle.default, reuseIdentifier: reuseIdentifier)
self.accessibilityElementsHidden = true
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
self.accessibilityElementsHidden = true
在 awakeFromNib() 内
如果仅从情节提要或 nib 创建 CustomTableViewCell,您可以在 awakeFromNib()
中设置属性。
class CustomTableViewCell: UITableViewCell
override func awakeFromNib()
self.accessibilityElementsHidden = true
在 tableView(_:cellForRowAt:) 内
如果您以编程方式创建和出列单元格,代码如下所示:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
// ... code that creates or dequeues the cell
cell.accessibilityElementsHidden = true
return cell
【讨论】:
以上是关于如何禁用自定义静态 UITableViewCell 的可访问性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?