2010-11-09 3 views
8

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

- (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]; 

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

+1

вы знаете, если его рекурсивным через подвиды? –

+0

Как если бы вы установили значениеIsAccessibilityElement в YES, это все говорит? –

ответ

12

Если у вас есть 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

Я сделал это раньше, и это сработало. Это настоящая боль. –

+0

lub you, you awesome :) – thndrkiss

+1

Последний 'return 0;' в 'indexOfAccessibilityElement:' должен быть: 'return NSNotFound;' – plu

0

В прошивке 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]? 
Смежные вопросы