3

我在表格视图中实现了所有可访问性操作方法并添加了“可调整”特征。我使用 UITableView 进行了自定义控件,以通过滚动选择一个项目。它没有可供选择的典型行。它用于滚动,标记显示选择的内容。类似于 UIPickerView 或 Weightbot 中的选择器。它是一个自定义日期选择器控件,用于选择事件日期。

但 iOS 从不调用我的辅助功能操作方法。在表格视图中向上或向下轻弹 Voice Over 没有正确反应。它疯狂地跳来跳去。

我必须为配音设置委托或数据源吗?当用户像在 UIPickerView 中一样向上/向下轻拂时,如何让它正确地向上/向下滑动我的表格视图?

了解 Apple 是如何通过 VoiceOver 访问 UIDatePicker 将大有帮助。它对每一列使用 UITableView。您可以在列之间拖动以选择列。然后您可以向上轻弹以增加或减少。

编辑:递归地转储有关 UIDatePicker 的信息以查看它是如何设置的。

 UIDatePicker: 
     _UIDatePickerView: 
         UIView: 
         _UIOnePartImageView: 
         _UIPickerWheelView: 
         _UIPickerViewSelectionBar: 
         UIPickerTableView:; contentOffset: {0, 2.19991e+06}>
             UIPickerTableViewWrapperCell: 
                 UITableViewCellContentView: 
                 UIDatePickerWeekMonthDayView: 
                     UILabel: {label = 28. Jul} {traits = staticText } {accessibilityIncrement} {accessibilityDecrement} {accessibilityScroll:} {accessibilityPerformEscape} {accessibilityPerformMagicTap} 

它在设置/实施时打印所有可用的可访问性相关的东西。如您所见,奇怪的是表格视图单元格的 UILabel 实现了滚动方法。这对我来说没有意义。为什么是这样?为什么不是 UIPickerTableView 本身?并且在整个 UIDatePicker 中也没有可调整的特性。

这是我用来转储此信息的代码。为了确定,我在延迟 2 秒后最初在 UIDatePicker 上调用它。我将此代码放在 UIView 的类别中。

- (NSString *)description {
    NSString *className = NSStringFromClass([self class]);

    NSMutableString *str = [NSMutableString stringWithFormat:@"%@: ", className];

    if (self.isAccessibilityElement) {
        if (self.accessibilityLabel) {
            [str appendFormat:@"{label = %@} ", self.accessibilityLabel];
        }

        UIAccessibilityTraits traits = self.accessibilityTraits;
        [str appendString:@"{traits = "];
        if (traits & UIAccessibilityTraitAdjustable) {
            [str appendString:@"adjustable "];
        }
        if (traits & UIAccessibilityTraitAllowsDirectInteraction) {
            [str appendString:@"interaction "];
        }
        if (traits & UIAccessibilityTraitButton) {
            [str appendString:@"button "];
        }
        if (traits & UIAccessibilityTraitCausesPageTurn) {
            [str appendString:@"pageTurn "];
        }
        if (traits & UIAccessibilityTraitHeader) {
            [str appendString:@"header "];
        }
        if (traits & UIAccessibilityTraitImage) {
            [str appendString:@"image "];
        }
        if (traits & UIAccessibilityTraitKeyboardKey) {
            [str appendString:@"kbKey "];
        }
        if (traits & UIAccessibilityTraitLink) {
            [str appendString:@"link "];
        }
        if (traits & UIAccessibilityTraitNone) {
            [str appendString:@"none "];
        }
        if (traits & UIAccessibilityTraitNotEnabled) {
            [str appendString:@"notEnabled "];
        }
        if (traits & UIAccessibilityTraitPlaysSound) {
            [str appendString:@"sound "];
        }
        if (traits & UIAccessibilityTraitSearchField) {
            [str appendString:@"search "];
        }
        if (traits & UIAccessibilityTraitSelected) {
            [str appendString:@"selected "];
        }
        if (traits & UIAccessibilityTraitStaticText) {
            [str appendString:@"staticText "];
        }
        if (traits & UIAccessibilityTraitSummaryElement) {
            [str appendString:@"summaryElement "];
        }
        if (traits & UIAccessibilityTraitUpdatesFrequently) {
            [str appendString:@"updatesFreq "];
        }
        [str appendString:@"} "];


        if ([self respondsToSelector:@selector(accessibilityIncrement)]) {
            [str appendString:@"{accessibilityIncrement} "];
        }
        if ([self respondsToSelector:@selector(accessibilityDecrement)]) {
            [str appendString:@"{accessibilityDecrement} "];
        }
        if ([self respondsToSelector:@selector(accessibilityScroll:)]) {
            [str appendString:@"{accessibilityScroll:} "];
        }
        if ([self respondsToSelector:@selector(accessibilityPerformEscape)]) {
            [str appendString:@"{accessibilityPerformEscape} "];
        }
        if ([self respondsToSelector:@selector(accessibilityPerformMagicTap)]) {
            [str appendString:@"{accessibilityPerformMagicTap} "];
        }
    }


    return str;
}
4

0 回答 0