2010-11-09 29 views
8

Bất kể tôi cố gắng làm gì, tôi không thể giữ UITableViewCell tùy chỉnh của mình hoạt động như cần theo các quy tắc mặc định cho UIAccessiblity. Tôi không muốn tế bào này hoạt động giống như một thùng chứa khả năng truy cập (cho mỗi người), vì vậy, hãy theo dõi guide Tôi có thể làm cho tất cả các bản xem trước của tôi có thể truy cập được, đúng không ?! Nó nói để làm cho mỗi phần tử có thể truy cập một cách riêng biệt và đảm bảo rằng chính nó không thể truy cập được.Sự cố UITableViewCell tùy chỉnh với các thành phần 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] 

Hệ thống thoại qua lần đọc nội dung của toàn bộ ô cùng một lúc, mặc dù tôi đang cố dừng hành vi đó. Tôi có thể nói

 [sub2 setIsAccessibilityElement:NO]; 

nhưng điều đó sẽ làm cho thành phần này hoàn toàn không thể đọc được. Tôi muốn giữ cho nó có thể đọc được, nhưng không có toàn bộ tế bào được xử lý như một thùng chứa (và được cho là ngôn ngữ tiếng Anh). Có vẻ như không có nhiều thông tin trên mạng, vì vậy ít nhất tôi cũng muốn ghi lại nó.

+1

Bạn có biết nếu đệ quy của mình thông qua các subviews? –

+0

Giống như nếu bạn setIsAccessibilityElement to YES, nó có nói tất cả không? –

Trả lời

12

Nếu bạn có 2 phần tử riêng biệt (sub1sub2), bạn có thể ghi đè các phương thức của giao thức không chính thức 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

Tôi đã làm điều này trước và nó hoạt động. Đó là một nỗi đau thực sự. –

+0

lub you, you are awesome :) – thndrkiss

+1

'return 0;' cuối cùng trong 'indexOfAccessibilityElement:' nên là: 'return NSNotFound;' – plu

0

Trong iOS 8 hoặc mới hơn, một cách đơn giản có thể thiết lập accessibilityElements tài sản:

// 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]? 
Các vấn đề liên quan