当UITableView
是可编辑的时,当VoiceOver打开时,其UITableViewCells
允许用户执行自定义操作。当VoiceOver光标位于单元格上时,用户可以通过向上或向下滑动来听到可用的操作,然后通过双击屏幕上的任意位置来调用这些操作。我的单元格中只有两个操作可用:删除(调用通常的单元格删除)和默认(调用单元格上的点击)。我的问题有两个:
有没有一种方法可以将自定义VoiceOver Action 添加到单元格?
默认情况下,即使表 View 委托(delegate)在tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:
方法中返回了自定义标题,“删除”操作也将被读出为“删除”。如何使VoiceOver读出自定义 Action 标题?
最佳答案
根本没有用于向VoiceOver提供自定义元素操作的API。没有UIAccessibility*
协议(protocol)为此提供了任何可能的方法。我想如果您需要添加自定义操作并希望Apple在将来的iOS版本中实现它(或者一个月后会在iOS 7中出现),您应该提起诉讼。
UPDATE :从iOS 8开始,您可以设置/实现 accessibilityCustomActions
属性以返回 UIAccessibilityCustomAction
对象的数组(请注意,VoiceOver仍会在其UI中添加“激活项”默认操作,除了提供的内容之外。) :
self.accessibilityCustomActions = [
UIAccessibilityCustomAction(name: NSLocalizedString("Close", comment: ""), target: self, selector: "didPressClose")
]
...
@objc
func didPressClose() -> Bool {
...
}
与Swift和选择器一样,如果您不将
@objc
子类化/该方法是私有(private)的,请不要忘记在Swift中将 NSObject
属性添加到自定义操作的目标方法中,否则该方法是私有(private)的,否则在尝试使用VoiceOver激活该操作时,不会做任何事情,并播放“已到达边界尽头”的声音(至少在iOS 8.2和8.3上,我使用做过NSObject
子类的目标对象进行了测试)。关于您的第二个问题-感觉像是个错误,您可以再次提出雷达请求:-)