如何禁用自定义静态UITableViewCell的可访问性
我有一个包含带静态内容的UITableViewController
的故事板。 细胞非常简单,只包含一个UILabel
。 如果我现在要禁用其中一个单元格的可访问性,我只需取消选中标签上的标记即可。 这按预期工作。
但是,如果我现在创建一个UITableViewCell
的空子类并将其用作我的静态单元格的单元格类,则将启用辅助function,忽略所有设置。
我尝试重写-isAccessibilityElement
以返回NO
,以编程方式将所有子视图accessibilityElement
属性设置为NO
,但在使用VoiceOver时仍然可以选择它。 VoiceOver不会读取内容,只有一个“”似乎在那里(在此元素上向上/向下滑动时可以听到)。
如何禁用自定义单元格的辅助function?
也许,这种方式更容易。
cell.textLabel.accessibilityElementsHidden = YES;
看这篇文章
;)
好的,我找到了一个解决方案,虽然我对此并不满意。
要禁用单元格作为辅助function元素,您需要将其转换为无任何元素的辅助function容器:
@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
在斯威夫特
*示例代码是Swift 3,但设置accessibilityElementsHidden
的关键代码行不是特定于Swift 3的。
在显示单元格(UITableViewCell)之前,必须将单元格的accessibilityElementsHidden属性设置为true
。 此属性指示隐藏可访问性元素(在本例中为单元格)中包含的辅助function元素。 accessibilityElementsHidden
默认为false
。
在init()中
以下代码将在自定义UITableViewCell子类中的初始化时设置accessibilityElementsHidden
true
。 如果单元格由storyboard,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()中
如果只能从故事板或笔尖创建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 }