3

すべてのアクセシビリティ アクション メソッドをテーブル ビューに実装し、「調整可能」特性を追加しました。スクロールしてアイテムを選択するために UITableView でカスタム コントロールを作成しました。選択する典型的な行はありません。これはスクロールを目的としており、マーカーは選択されているものを示します。UIPickerView または Weightbot のセレクターに似ています。イベントの日付を選択するカスタム日付ピッカー コントロールです。

しかし、iOS がアクセシビリティ アクション メソッドを呼び出すことはありません。テーブル ビューのボイス オーバーで上または下にフリックすると、正しく反応しません。乱暴に飛び跳ねます。

ナレーション用にデリゲートまたはデータ ソースを設定する必要がありますか? 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