VoiceOver in UITextView: read paragraph at a time


I'm developing a newspaper, magazine and book reading app for the visually impaired. Users of the app want VoiceOver to read the text in the UITextField a paragraph at a time and not read everything in one go. How can this be accomplished?


This is very simple actually. Any time you have a new paragraph, utilize a new UITextField view. This causes the "default" behavior to be scanning one paragraph of text at a time, which is very intuitive. While still allowing the "Line by Line" rotor setting to function as one line at a time. Which the UIAccessibilityReadingContent protocol would solution would not do.

NOTE: Another way to accomplish the same effect as multiple UITextFields is to utilize the UIAccessibilityContainer protocol to create synthetic Accessibility Views only scene by VoiceOver. Turning your one larger UITextField container, into multiple UIAccessibilityElements for accessibility purposes.

Though, if you have paging behavior, you SHOULD utilize the paging feature of this protocol. THIS would allow a user to read your collection of multiple UITextFields one page at a time.

To summarize, this approach allows users to:

<ul><li>Read One page at a time (by utilizing UIAccessibilityReadingContent)</li> <li>Read one paragraph at a time (default behavior, with one paragraph per UITextField)</li> <li>Read one line at a time (rotor: Line by Line)</li> <li>Also, other rotor settings (Word and Character)</li> </ul>

Seems solid to me!


  • Load RSA PKCS#1 private key from memory?
  • Angular2 RC5 Cross-Module Provider / Scanning
  • JAVA 7 watch service
  • Does Python have an equivalent of Perl's qq?
  • iOS autolayout - gap between image and top of the screen, despite constraints set
  • How to override isEmpty method of JsonSerializer for specific class without overriding serialize met
  • strtotime returns incorrect timestamp for '-1 month'
  • How to allow inbound calls in pjsip and Asterisk 13?
  • C# List.Add not adding properly
  • What's a better way to swap two argument values?
  • Google app engine not accepting binary file upload anymore
  • Why not Factory pattern for sorting? [closed]
  • R h2o.glm - issue with max_active_predictors
  • Layout design help Android
  • SIP API media codecs
  • Compare struct to a constant in C
  • Wrong labels when plotting a time series pandas dataframe with matplotlib
  • Android application: how to use the camera and grab the image bytes?
  • Unable to install Git-core+svn by MacPorts
  • Django simple Captcha “No module named fields” error
  • Bad request using file_get_contents for PUT request in PHP
  • Could not find rake using whenever rails
  • Python CGI os.system causing malformed header
  • Spring Data JPA custom method causing PropertyReferenceException
  • FB SDK and cURL: Unknown SSL protocol error in connection to graph.facebook.com:443
  • Using $this when not in object context
  • QLineEdit password safety
  • How do I fake an specific browser client when using Java's Net library?
  • Why HTML5 Canvas with a larger size stretch a drawn line?
  • Spray.io: When (not) to use non-blocking route handling?
  • How reduce the height of an mschart by breaking up the y-axis
  • Modifying destination and filename of gulp-svg-sprite
  • Perl system calls when running as another user using sudo
  • GridView Sorting works once only
  • Cannot Parse HTML Data Using Android / JSOUP
  • ExecuteAsync RestSharp to allow backgroundWorker CancellationPending c#
  • How get height of the a view with gone visibility and height defined as wrap_content in xml?
  • Getting Messege Twice Using IMvxMessenger
  • Can Visual Studio XAML designer handle font family names with spaces as a resource?
  • How to load view controller without button in storyboard?