【问题标题】:Custom VoiceOver actions in UITableViewCellUITableViewCell 中的自定义 VoiceOver 操作
【发布时间】:2013-04-25 08:02:52
【问题描述】:

UITableView 可编辑时,其UITableViewCells 允许用户在 VoiceOver 开启时执行自定义操作。当 VoiceOver 光标位于单元格上时,用户可以通过向上或向下滑动来听到可用的操作,然后通过双击屏幕上的任意位置来调用操作。我的单元格中只有两个可用的操作:Delete(调用通常的单元格删除)和 Default(调用单元格上的点击)。我的问题有两个:

有没有办法向单元格添加自定义 VoiceOver 操作?

默认情况下,即使表格视图委托在tableView:titleForDeleteConfirmationButtonForRowAtIndexPath: 方法中返回自定义标题,删除 操作也会被读出为“删除”。如何让 VoiceOver 读出自定义动作标题?

【问题讨论】:

标签: ios voiceover uiaccessibility


【解决方案1】:

根本没有 API 可以为 VoiceOver 提供自定义元素操作。没有UIAccessibility* 协议为此提供了任何可能。如果你需要添加自定义操作,我想你应该提交一个雷达,并希望 Apple 会在未来的 iOS 版本中实现它(或者它会在一个月后出现在 iOS 7 中)。

更新:从 iOS 8 开始,您可以设置/实现 accessibilityCustomActions 属性以返回您的 UIAccessibilityCustomAction 对象数组(请注意,VoiceOver 仍将添加“激活项目”默认值除了您提供的内容之外,还可以在其 UI 中执行操作。):

self.accessibilityCustomActions = [
    UIAccessibilityCustomAction(name: NSLocalizedString("Close", comment: ""), target: self, selector: "didPressClose")
]
...
@objc
func didPressClose() -> Bool {
    ...
}

像往常一样使用 Swift 和选择器,不要忘记将 @objc 属性添加到 Swift 中自定义操作的目标方法中,如果您没有子类化 NSObject/该方法是私有的,否则在尝试使用 VoiceOver 激活动作,它不会做任何事情并播放“到达边界结束”的声音(至少在 iOS 8.2 和 8.3 上,我使用子类 NSObject 的目标对象进行了测试)。

关于您的第二个问题 - 感觉就像一个错误,您可以再次提交雷达:-)

【讨论】:

  • 有没有办法自定义默认操作的措辞? “激活项目”并不是很有帮助。
  • 不,因为没有用于此的 API(也无法自定义有关自定义操作可用性的默认提示,即“向上或向下滑动 ...”)。
  • 只是一个想法,但您是否尝试过删除特征?例如,尝试删除 'Button' 特征,看看是否有帮助。 (我现在不在电脑旁,否则我自己测试一下。)
  • 您解决了这个问题吗?使用@BorisDušek 解决方案,我可以通过 VoiceOver 听到声音,并且可以选择动作,但实际上无法使用它删除单元格。原因是我无法使用#selector 传递 indexPath.row .. 如果您有任何解决方案,请告诉我
  • 万一其他人一开始不能让它工作:实现这个时,确保你的目标方法返回一个布尔值。否则将无法正常工作。
【解决方案2】:

iOS 8 增加了对应用定义的自定义操作的支持。来自UIAccessibility.h

/*
 Return an array of UIAccessibilityCustomAction objects to make custom actions for an element accessible to an assistive technology.
 For example, a photo app might have a view that deletes its corresponding photo in response to a flick gesture.
 If the view returns a delete action from this property, VoiceOver and Switch Control users will be able to delete photos without performing the flick gesture.
 default == nil
 */
@property (nonatomic, retain) NSArray *accessibilityCustomActions NS_AVAILABLE_IOS(8_0);

【讨论】:

  • 因此,如果我将其添加到头文件中,我将使用 Voice Over 进行辅助功能操作?
猜你喜欢
  • 2011-11-15
  • 2019-06-02
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
相关资源
最近更新 更多