【问题标题】:How to disable accessibility for custom static UITableViewCell如何禁用自定义静态 UITableViewCell 的可访问性
【发布时间】:2014-05-23 08:22:36
【问题描述】:

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

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

我尝试覆盖-isAccessibilityElement 以返回NO,以编程方式将所有子视图accessibilityElement 属性设置为NO,但在使用VoiceOver 时仍然可以选择它。 VoiceOver 不会读取内容,似乎只有一个“ ”(在此元素上向上/向下滑动时可以听到)。

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

【问题讨论】:

    标签: ios uitableview voiceover uiaccessibility


    【解决方案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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多