我制作了一个自定义UITableViewCell,它包含一个UISlider和三个UILabel:标题(滑块名称),当前值,最小值和最大值。
当使用VoiceOver时,该单元格上的isAccessibilityElement = NO,因此用户必须在执行双拖动手势(触摸,触摸,触摸,向左/向右移动,触摸)之前选择UISlider作为UITableViewCell的子项目修改价值。我想让整个UITableViewCell假装它是UISlider。所以我设置isAccessibilityElement = YES然后我无法弄清楚我需要在UITableViewCell的子类中覆盖什么,以便它将任何相关的消息路由到UISlider。
当我双拖动滑块时,我听到声音意味着我成功开始修改值的手势,但它停在那里。
我尝试了UIAccessibilityTraitAdjustable,但是-accessibilityDecrement和-accessibilityIncrement并未涵盖滑块可以完成的所有操作。当用户左/右双向拖动时,我似乎无法找到调用的方法。我尝试覆盖-touchesMoved :(除其他外)但我没有收到任何电话。
我甚至尝试使用假对象来记录所有方法调用,使用-forwardInvocation:和-methodSignatureForSelector:发送到真实对象,直到我发现UIKit不允许伪对象(未找到关于-superlayer的奇怪消息)因此,我无法记录VoiceOver发送给UISlider(或带有isAccessibilityElement = YES的UITableViewCell)的内容。
那么,我错过了什么?