配音仅读取UILabel而不是UIWebview内容

时间:2014-02-05 08:23:37

标签: ios accessibility voiceover

我创建了UITableViewCell,它包含两个对象:

  1. UILabel - 用于显示标题文字。
  2. UIWebView-用于显示HTML。
  3. 通常当语音焦点UITableViewCell时,它会毫无问题地读取所有添加的标签,但在我的情况下,语音只读取标题而不是webview html内容,用户必须向左和向左滑动才能移动到下一个/上一个元素阅读webview的内容。

    我的要求是,当语音焦点UITableViewCell时,语音应该一次性读取UILabels和webview内容,因为作为开发人员我们知道它是HTML,但对于app用户(盲人) 我对此一无所知。

    另外,我想知道如何禁用UIWebview可访问性。我尝试将isAccessibility设置为NO,但仍然 Voice Over 焦点UIWebview。 [self.webview setIsAccessibilityElement:NO];

    如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我通过在表格单元格视图中实现方法“accessibilityLabel”解决了这个问题。对于webview获取Web视图内容,将html转换为纯文本并使用它。不要忘记禁用标签和webview可访问性。

-(NSString*)accessibilityLabel{

NSString *labelText=nil;
NSMutableString *cellLabelText=[[NSMutableString alloc] init];

//Set label
[cellLabelText appendString:[NSString stringWithFormat:@", %@", self.titleLabel.text]];

//Fetch web view content, convert html into plain text and use it.
NSString *html = [self stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];
NSString *plainText=[self convertHTMLIntoPlainText:html];

[cellLabelText appendString:plainText];


labelText=[NSString stringWithString:cellLabelText];
[cellLabelText release];


return labelText;
}


-(NSString *)convertHTMLIntoPlainText:(NSString *)html{

NSScanner *myScanner;
NSString *text = nil;
myScanner = [NSScanner scannerWithString:html];

while ([myScanner isAtEnd] == NO) {

    [myScanner scanUpToString:@"<" intoString:NULL] ;

    [myScanner scanUpToString:@">" intoString:&text] ;

    html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@""];
}
//
html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

return html;
}

答案 1 :(得分:0)

怎么样:

[self.webview setAccessibilityElementHidden:YES]

然后使用accessibilityLabel属性在单元格上设置您喜欢的任何可访问性标签。