我正在为失明的人编写一个应用程序,并希望在其主页上添加一些说明。该指令是一个多段静态文本块。我把它放在UITextView中。
我希望盲人用户能够使用VoiceOver逐段阅读说明。但是,当用户将VoiceOver焦点移动到UITextView上时,VoiceOver始终将指令作为整体读取。我的设备是带有iOS 7的iPad 2和iPhone 5。
那么,有什么方法可以设置我的UITextView,以便VoiceOver用户可以逐段阅读文本片段吗?如果使用UITextView无法做到这一点,还有哪些其他选择?我真的必须使用UITableView吗?
谢谢!
乔
答案 0 :(得分:4)
VoiceOver用户,而非您,确定一次读取多少文本。您可以通过继承UITextView
并实施the UIAccessibilityContainer
informal protocol来覆盖它。但是,对于VoiceOver用户来说这是不直观的,所以我建议你避免使用它。一些VoiceOver用户可以非常快速地收听大量的文本,如果你人为地强迫阅读在段落之间停止,那么对他们来说会很令人沮丧。
TTTAttributedLabel
是一个支持超链接的开源标签库,它会覆盖这些方法以使链接可访问。如果您决定根据我的建议继续执行此实施,您可能希望review the relevant source code。
答案 1 :(得分:0)
最简单的解决方案:仅在适当时选择并使用转子项目。
VoiceOver用户知道此手势,开发人员唯一要做的就是完美地格式化UITextView内容。
此后我用代码片段创建了一个空白应用程序:
class TextViewURLViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var myTextView: UITextView!
let myString = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel vulputate purus. Vivamus imperdiet efficitur orci, eu dictum lorem rutrum nec. Quisque sed dui nec mauris pulvinar ultricies a et ex. Cras dapibus, ipsum sit amet facilisis laoreet, velit sapien dapibus ex, sed tempor lacus nulla ac neque. Donec eu sagittis risus. Nunc commodo quis dolor iaculis eleifend. Suspendisse justo nunc, fermentum a maximus at, viverra in velit. Vivamus eu efficitur velit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus et porta justo. Proin dui lacus, fringilla sit amet est eu, lacinia vulputate ante. Nulla sodales condimentum ornare. Integer sollicitudin augue metus, lobortis mollis ligula tempor at.
Sed cursus feugiat dolor. Etiam orci odio, semper nec feugiat in, viverra facilisis mauris. Duis dignissim, orci a tincidunt malesuada, ex neque pharetra nibh, venenatis auctor massa nibh sit amet dolor. Curabitur scelerisque suscipit tincidunt. Nunc a sapien consequat, porttitor velit at, fermentum nulla. Aenean lobortis consequat leo ac porta. Praesent fringilla vitae nisl in rhoncus.
Donec sed turpis sed nibh finibus consequat. Pellentesque non nulla fringilla, porttitor elit nec, lacinia turpis. Suspendisse commodo, erat sed volutpat gravida, erat libero maximus urna, ut bibendum justo leo et libero. Donec tempor lorem eget tincidunt consequat. Suspendisse ut pretium est. Suspendisse tristique sollicitudin cursus. Ut pulvinar ultrices euismod. Mauris iaculis facilisis sem, et euismod purus lobortis vel. Maecenas ut nulla diam. Mauris porta fringilla vulputate. Maecenas accumsan, nulla vel elementum laoreet, neque nisl faucibus est, ut varius lorem tellus vel mauris.
"""
override func viewDidLoad() {
myTextView.attributedText = NSMutableAttributedString(string: myString)
}
}
按照以下步骤逐段阅读UITextView内容:
Lines
项,以在适当时自动显示。Lines
项。现在,如果您认为用户不知道此手势(奇怪但可能),则可以:
UIAccessibilityContainer
协议,方法是将UITextView内容分成所需的段落UIAccessibilityElement
。如果有很多页面危在旦夕,请查看 UIAccessibilityReadingContent
,它应该可以帮助您一次阅读一页。
取决于您,以获得最适合您的解决方案。