在UIBarButtonItem上设置可访问属性

32

我在 Interface Builder 中有几个 UIBarButtonItem 对象,但是我找不到任何选项来设置这些按钮的无障碍标签或提示。

如何设置这些属性呢?


在XCode 5的Storyboard中有没有一种方法可以做到这一点? - fatuhoku
8个回答

28
您可以使用“用户定义的运行时属性”并在那里指定您的无障碍信息: Runtime attributes

4
纠正一下,对于提示信息,你应该使用 accessibilityHint 而不是 keyPath - Allison

24

仅在 Interface Builder 中设置 accessibilityLabel 用户定义的运行时属性是不够的。您还需要将 isAccessibilityElement 设置为 true,这将使所有辅助功能信息保留在 Interface Builder 中。

IB Screenshot


1
为了匹配其他元素,类型应该是本地化字符串。 - OrangeDog
你能翻译一下 accessibilityLabel 是这样设置的吗? - pronebird

15

好的,看起来在接口构建器中没有办法做到这一点,即使你可以使用IB设置其他UI元素的可访问性属性。所以我在我的工具栏上设置了一个标签,然后在我的viewWillAppear方法中添加了这段代码:

UIToolbar *bottombar = (UIToolbar*)[self viewWithTag:kBottomToolbar];

UIView *view = (UIView*)[bottombar.items objectAtIndex:0];
[view setAccessibilityLabel:NSLocalizedString(@"Add Bookmark", @"")];
[view setAccessibilityHint:NSLocalizedString(@"Add Bookmark", @"")];

对于每个按钮项,以此类推...

虽然不是最优雅的方法,但它有效。


2
从iOS 5.0开始,您可以直接在UIBarButtonItem上设置accessibilityLabel属性。 - rmaddy

7

我知道这已经有点老了,但我最近遇到了这个需求。从iOS 5.0开始,你可以通过以下方式轻松设置UIBarButtonItem的可访问性标签:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...;
btn.accessibilityLabel = @"Label";

没有更多的黑客攻击。

4

我通过添加一行额外的代码,使得上面的代码可以与UIBarButtonItems配合使用:

[view setIsAccessibilityElement:YES];

这解决了问题。请记住,如果父视图也将此设置为YES,则子视图将被忽略。 - Aaron Brager

3
您可以使用IBInspectable来实现此功能,这样您就可以在Interface Builder的侧边栏中获得一些方便的选项。
public extension UIBarButtonItem {
  @IBInspectable var accessibilityEnabled: Bool {
    get {
      return isAccessibilityElement
    }
    set {
      isAccessibilityElement = newValue
    }
  }

  @IBInspectable var accessibilityLabelText: String? {
    get {
      return accessibilityLabel
    }
    set {
      accessibilityLabel = newValue
    }
  }
}

UIBarButton Accessibility options in Interface Builder

https://gist.github.com/KaneCheshire/dcce5246c3399072a5200189bfc53fe2


2
尝试手动设置UIBarButtonItem图像的辅助标签并没有成功。然而,如果我手动设置标题,那么标签就会起作用。但它会在图像下方显示标题。
最终我创建了一个UIButton,并将其用作UIBarButtonItem的自定义视图。唯一的损失是UIBarButtonItem执行的图像遮罩。额外的好处是可以在IB中配置可访问性。

1
在Xcode 10.2中,“标题”字段运作良好。例如,我的按钮可以被访问为“排序”。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接