2016-08-07 2 views
0

В моем проекте у меня есть tableView, а в строке есть пользовательский UITableViewCell, у которого есть одно из его свойств - GMGridView (похожее на UICollectionView), оно имеет свои методы делегирования :UIAccessibility в gridView - не видит новые ячейки

- (GMGridViewCell *)GMGridView:(GMGridView *)gridView cellForItemAtIndex:(NSInteger)index { 
GMGridViewCell *cell = [gridView dequeueReusableCell]; 

    if (!cell) 
    { 
     cell = [[GMGridViewCell alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]; 
     cell.contentView = [[GridViewContentView alloc] initWithFrame:cell.frame style:GridViewStyleNews]; 
    } 
    Item *feed = _contentArray[index]; 
     GridViewContentView *contentView = (GridViewContentView *)cell.contentView; 
      contentView.textLabel.text = feed.textLabel; 
    [contentView.imageView setURL:[NSURL URLWithString:feed.imageLink] withPreset:self.preset]; 
    cell.contentView = contentView; 
    NSLog(@"Address index %d - %p:", index, cell); 
     return cell; 
} 

На данном этапе - создан пользовательский контент-просмотр -GridViewContentView и является идентификатором в виде содержимого содержимого.

Это настраиваемое представление содержимого определяются как имеющие внутри него есть следующие методы:

- (BOOL)isAccessibilityElement { 
    return YES; 
} 

- (NSString *)accessibilityLabel { 
    return [NSString stringWithFormat:@"%p, %@", self.superview, self.textLabel.text]; 
} 

В моем случае у меня есть 19 пунктов в GridView.

Так что, когда Tableview загружен на IPad (в альбомной ориентации) создал 6 предметов, которые они вставляются в NSArray внутри GridView:

2016-08-07 17:04:39.626 DummyAccessibility[2785:230602] Address index 0 - 0x7a0162e0: 
2016-08-07 17:04:39.632 DummyAccessibility[2785:230602] Address index 1 - 0x797390e0: 
2016-08-07 17:04:39.633 DummyAccessibility[2785:230602] Address index 2 - 0x79643db0: 
2016-08-07 17:04:39.639 DummyAccessibility[2785:230602] Address index 3 - 0x7a013290: 
2016-08-07 17:04:39.640 DummyAccessibility[2785:230602] Address index 4 - 0x7a0114f0: 
2016-08-07 17:04:39.641 DummyAccessibility[2785:230602] Address index 5 - 0x7965ef30: 

и голос за кадром говорит правильно текст - что принадлежит к тесьмой пункта. Но когда я прокручиваю - дополнительно создаются следующие 2 пункта (6 и 7), а первые 2 - повторно используются для предметов (8 и 9). новинки:

2016-08-07 17:04:59.961 DummyAccessibility[2785:230602] Address index 6 - 0x79674ac0: 
2016-08-07 17:05:00.366 DummyAccessibility[2785:230602] Address index 7 - 0x7a074f20: 

повторно использованы элементы:

2016-08-07 17:05:00.982 DummyAccessibility[2785:230602] Address index 8 - 0x7a0162e0: 
2016-08-07 17:05:05.704 DummyAccessibility[2785:230602] Address index 9 - 0x797390e0: 

После отладки я определил, что эти новые детали никогда не принимаются UIAccessibility. Когда я пытаюсь нажать на него - VoiceOver говорит - перенаправляется внутри ячейки (номер 5) и берет из него значение textValue. Итак, когда я пытаюсь использовать повторно используемые элементы, он сообщает правильное (повторно используемое текстовое поле). Такая ситуация (с этими новыми элементами сохраняется даже при их повторном использовании). Я не понимаю, почему это так. item number 6 that Voice Over doesn't see

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

Большое спасибо.

+1

Я считаю, что вам придется реализовать его на 'UITableViewCell', например. что делает его контейнером доступности, потому что ячейка уже создает для вас метку доступности. – Sulthan

+0

@ Sulthan, вы имеете в виду, что лучший способ - сделать UITableViewCell как контейнер, а внутри него создать массив _accessibilityElements, а в методе «cellForItemAtIndex» создать UIAccessibilityElement и поместить его в массив _accessibilityElements? – Melany

+1

Что-то в этом роде. К сожалению, я не помню точное решение. Я занимался этой проблемой много лет назад, когда это было необходимо для автоматизации пользовательского интерфейса. Возможно, вы хотите сделать 'accessibilityElements' независимым на' cellForItem'. Это будет нелегкое решение. Идеальное решение, вероятно, заключалось бы в том, чтобы полностью оставить UITableView и использовать 'UICollectionView'. – Sulthan

ответ

0

Я нашел решение на базе Шон Хауэлл ответить здесь iOS Accessibility for CollectionView in a TableViewCell

Поэтому я добавил дополнительное свойство - UIView в моем обычае tableViewCell,

, а затем добавляют в него -в моем случае - GMGridView.

self.trickView = [[UIView alloc]initWithFrame:self.bounds]; 
    self.trickView.backgroundColor = [UIColor clearColor]; 
    self.trickView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    _trickView.accessibilityElements = @[gmGridView]; 
    [self.contentView addSubview:_trickView]; 
    [self.gridView removeFromSuperview]; 
    self.gridView = nil; 
    self.gridView = gmGridView; 
    [self.trickView addSubview:gmGridView]; 
Смежные вопросы