Потеря доступности в подпредставлении UITableView - PullRequest
1 голос
/ 04 января 2012

Я пошел в головоломку доступности.

У меня есть представление, для которого требуется как табличное представление сгруппированного стиля, так и (при нажатии UIBarButtonItem) простое табличное представление. Сгруппированный табличный вид используется по умолчанию. Я решил эту проблему, добавив контроллер простого представления в качестве подпредставления (сгруппированного) tableView, а затем удалив его при возврате к сгруппированному tableView. Работает очень хорошо.

Я сейчас реализую голос за кадром и столкнулся с проблемой. Когда отображается простой табличный вид (простой список имен), закадровый текст является «пустым списком» для всего представления. Происходит то, что сгруппированное табличное представление все еще там, и пустое (ноль строк), просто скрытое за простым табличным представлением. (Технически простой tableView является подпредставлением сгруппированного tableView, использующего тот же CGRect, что и сгруппированный tableView, поэтому фон не виден.)

То, что я хотел бы сделать, это «скрыть» пустой сгруппированный табличный вид от наложения голоса, чтобы активировались касания в простом табличном виде (говорят о содержимом ячейки). isAccessiblityItem логическое значение, похоже, не имеет никакого эффекта.

Я понимаю, что одно представление с групповыми и простыми представлениями является нестандартным, но его использование здесь имеет смысл, поэтому изменение макета не вариант.

Вот упрощенная версия кода переключения таблиц.

Добавление простого табличного представления:

    UITableView *plainTableView = plainViewController.tableView;
    plainTableView.frame=groupedTableViewFrame;
    plainTableView.delegate=self;
    plainTableView.dataSource=self;
    plainTableView.tag=1;
    self.tableView.backgroundColor=[UIColor whiteColor];
    [self.view addSubview:plainTableView];
    [plainViewController release];

Снятие простой таблицы. Вид:

    for (UIView *subview in [self.view subviews]) {
        if (subview.tag == 1) {
            [subview removeFromSuperview]; //kills the plain view
            self.tableView.backgroundColor=[UIColor groupTableViewBackgroundColor];
        }
    }

Я пытался добавить различные настройки isAccessibilityItem при добавлении простого tableView, например:

    plainTableView.isAccessibilityElement=YES;
    self.tableView.isAccessibilityElement=NO;

, которые не оказывают видимого влияния.

Любая помощь с благодарностью. Спасибо!

Ответы [ 3 ]

1 голос
/ 15 октября 2012

Если вы создаете подкласс tableView, вы можете отключить его доступность следующим образом:



@implementation NonAccessibleTableView

-(BOOL)isAccessibilityElement {
    return NO;
}

- (NSInteger)accessibilityElementCount {
    return 0;
}

- (NSString *)accessibilityLabel {
    return nil;
}

@end


Дополнительно вы можете рассмотреть возможность создания двух родственных элементов tableViews, управляемых одним контроллером представления.

1 голос
/ 10 июля 2013

Вы пробовали accessibilityElementsHidden = YES?

http://developer.apple.com/library/ios/documentation/uikit/reference/UIAccessibility_Protocol/Introduction/Introduction.html#//apple_ref/occ/instp/NSObject/accessibilityElementsHidden

Полагаю, вам также необходимо опубликовать уведомление с помощью UIAccessibilityPostNotification - либо изменился макет, либо изменился экран.*

http://developer.apple.com/library/ios/documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/func/UIAccessibilityPostNotification

0 голосов
/ 05 января 2012

Я не пробовал, но, возможно, объединить параметр isAccessibilityElement с отправкой UIAccessibilityLayoutChangedNotification или UIAccessibilityScreenChangedNotification.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...