如何使用VoiceOver逐段阅读UITextView?

问题描述 投票:2回答:2

我正在为失明的人写一个应用程序,并希望在其主页上加上一些说明。该指令是一个多段静态文本块。我把它放在UITextView中。

我希望盲人用户能够使用VoiceOver逐段阅读说明。但是,当用户将VoiceOver焦点移动到UITextView上时,VoiceOver始终将指令作为整体读取。我的设备是带有iOS 7的iPad 2和iPhone 5s。

那么,有什么办法可以设置我的UITextView,以便VoiceOver用户可以逐段阅读文本片段吗?如果使用UITextView无法做到这一点,还有哪些其他选择?我真的必须使用UITableView吗?

谢谢!

ios uitextview accessibility voiceover
2个回答
4
投票

VoiceOver用户,而不是您,确定一次读取多少文本。您可以通过继承UITextView并实现the UIAccessibilityContainer informal protocol来覆盖它。但是,对于VoiceOver用户来说这是不直观的,所以我建议你避免使用它。一些VoiceOver用户可以非常快速地收听大量的文本,如果你人为地强迫阅读在段落之间停止,那么对他们来说会很令人沮丧。

TTTAttributedLabel是一个支持超链接的开源标签库,它会覆盖这些方法以使链接可访问。如果您决定根据我的建议继续执行此实施,您可能希望review the relevant source code


0
投票

最简单的解决方案:只需在适当的时候选择和使用转子项目。

VoiceOver用户知道这个手势,开发人员唯一要做的就是完美地格式化TextView内容。

我在下面创建了一个带有代码片段的空白应用程序:

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内容:

  1. 在“辅助功能 - VoiceOver - 转子”设置中,选择要在适当时自动显示的Lines项目。
  2. 当您的应用在屏幕上时,选择Lines项目。
  3. 向下滑动以获取要读出的第一段。
  4. 向下滑动以获取要读出的下一段。

enter image description here

现在,如果您认为用户不会知道此手势(奇怪但可能),您可以:

  • 删除您的初始UITextView并创建与段落一样多的UITextView,以便VoiceOver可以通过向右或向左轻松选择其中的每一个。
  • 使用UIAccessibilityContainer协议,将UITextView内容拆分为与所需段落一样多的UIAccessibilityElement

如果有很多页面受到威胁,请查看UIAccessibilityReadingContent,它可以帮助您一次阅读一页。

由您决定最适合您的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.