Пользовательская проблема UITableViewCell с элементами UIAccessibility - PullRequest
8 голосов
/ 09 ноября 2010

Независимо от того, что я пытаюсь, я не могу удержать свой пользовательский UITableViewCell от действия , как это должно в соответствии с правилами по умолчанию для UIAccessiblity. Я не хочу, чтобы эта ячейка действовала как контейнер доступности (per se), поэтому, следуя этому руководству , я смогу сделать все мои подвиды доступными, верно ?! В нем говорится, чтобы сделать каждый элемент доступным отдельно и убедиться, что сама ячейка недоступна.

- (BOOL)isAccessibilityElement
{
    return NO;
}

- (NSString *)accessibilityLabel
{
    return nil;
}

- (NSInteger)accessibilityElementCount
{
    return 0;
}


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier //cells use this reusage stuff
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) 
    {
        [self setIsAccessibilityElement:NO];
        sub1 = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)];
        [sub1 setAccessibilityLanguage:@"es"];
        [sub1 setIsAccessibilityElement:YES];
        [sub1 setAccessibilityLabel:sub1.text]

        sub2 = [[UILabel alloc] initWithFrame:CGRectMake(0,0,1,1)];
        [sub2 setAccessibilityLanguage:@"es"];
        [sub2 setIsAccessibilityElement:YES];
        [sub2 setAccessibilityLabel:sub2.text]

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

        [sub2 setIsAccessibilityElement:NO];

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

Ответы [ 2 ]

12 голосов
/ 18 января 2011

Если у вас есть 2 отдельных элемента (sub1 и sub2), вы можете переопределить методы неформального протокола UIAccessibilityContainer.

- (NSInteger)accessibilityElementCount {
    return 2;
}

- (id)accessibilityElementAtIndex:(NSInteger)index {
    if (index == 0) {
        return sub1;
    } else if (index == 1) {
        return sub2;
    }
    return nil;
}

- (NSInteger)indexOfAccessibilityElement:(id)element {
    if (element == sub1) {
        return 0;
    } else if (element == sub2) {
        return 1;
    }
    return NSNotFound;
}
0 голосов
/ 26 июля 2016

В iOS 8 или новее можно просто установить свойство accessibilityElements:

// A list of container elements managed by the receiver.
// This can be used as an alternative to implementing the dynamic methods.
@available(iOS 8.0, *)
public var accessibilityElements: [AnyObject]?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...