Ios 如何禁用自定义静态UITableViewCell的可访问性

Ios 如何禁用自定义静态UITableViewCell的可访问性,ios,uitableview,voiceover,uiaccessibility,Ios,Uitableview,Voiceover,Uiaccessibility,我有一个故事板,其中包含一个带有静态内容的UITableViewController。这些单元格非常简单,只包含一个UILabel。如果我现在想禁用其中一个单元格的可访问性,我只需取消选中标签上的标记。这正如预期的那样有效 但是,如果我现在创建一个空的UITableViewCell子类,并将其用作静态单元格的单元格类,则将启用可访问性,忽略所有设置 我尝试重写-isAccessibilityElement以返回NO,通过编程将所有子视图accessibilityElement属性设置为NO,但在

我有一个故事板,其中包含一个带有静态内容的
UITableViewController
。这些单元格非常简单,只包含一个
UILabel
。如果我现在想禁用其中一个单元格的可访问性,我只需取消选中标签上的标记。这正如预期的那样有效

但是,如果我现在创建一个空的
UITableViewCell
子类,并将其用作静态单元格的单元格类,则将启用可访问性,忽略所有设置

我尝试重写
-isAccessibilityElement
以返回
NO
,通过编程将所有子视图
accessibilityElement
属性设置为
NO
,但在使用VoiceOver时仍然可以选择。画外音不会读取内容,只有一个“”似乎在那里(在该元素上上下滑动时可以听到)


我需要做什么才能禁用自定义单元格的可访问性?

好的,我找到了一个解决方案,尽管我对它不是很满意

要将单元格禁用为可访问性元素,需要将其转换为不包含任何元素的可访问性容器:

@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

也许,这样更容易

cell.textLabel.accessibilityElementsHidden = YES;

)()

迅速地 *示例代码是Swift 3,但要设置
可访问性YelementsHidden
的关键代码行不是特定于Swift 3的

在显示单元格(UITableViewCell)之前,必须将单元格的属性设置为
true
。此属性指示是否隐藏辅助功能元素(在本例中为单元格)中包含的辅助功能元素<默认情况下,code>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()内 如果CustomTableViewCell仅从情节提要或nib创建,则可以在
awakeFromNib()中设置属性

在tableView中(u0:cellForRowAt:) 如果以编程方式创建单元格并将其出列,则代码如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // ... code that creates or dequeues the cell

    cell.accessibilityElementsHidden = true

    return cell
}

我刚刚在单元格本身上设置了accessibilityElementsHidden。您甚至可以使用用户定义的运行时属性在Interface Builder中执行此操作。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // ... code that creates or dequeues the cell

    cell.accessibilityElementsHidden = true

    return cell
}