限制VoiceOver从UILabel

时间:2015-04-26 05:15:18

标签: ios uitableview uilabel voiceover

我正在创建一个类似于邮件(或邮件或便笺)的应用程序,它显示包含邮件预览的UITableViewCell。文本通常不适合UILabel,因此文本被截断并自动显示省略号。这在我的应用中适用于有视力的用户,但在使用VoiceOver时,会大声朗读text的{​​{1}}个内容。在Mail中不会发生这种情况 - VoiceOver会在到达省略号时停止宣布文本。

如何在我的应用程序中获得与Mail相同的行为 - 强制VoiceOver在到达省略号时停止宣布文本?

UILabel

1 个答案:

答案 0 :(得分:0)

这是UILabel的一个子类,可以做你想要的。请注意,我没有努力优化这一点。那部分取决于你。从可访问性的角度来看,我的总体建议仍然是简单地离开它。从A11y的角度来看,覆盖可访问性标签只能描绘实际标签中的部分文本是一个非常值得怀疑的事情。请非常小心地使用此工具!

@interface CMPreivewLabel : UILabel
@end

@implementation CMPreviewLabel

- (NSString*)accessibilityLabel {
    return [self stringThatFits];
}

- (NSString*)stringThatFits {
    if (self.numberOfLines != 1) return @"This class would need modifications to support more than one line previews";

    const int width = self.bounds.size.width;

    NSMutableAttributedString* resultString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];

    while (width < resultString.size.width) {
        NSRange range = [resultString.string rangeOfString:@" " options:NSBackwardsSearch];

        range.length = resultString.length - range.location;

        [resultString.mutableString replaceCharactersInRange:range withString:@""];
    }

    return resultString.string;
}

@end