菜鸟教程小白 发表于 2022-12-13 13:28:03

iOS - 自定义 UIPickerView 上的意外 VoiceOver 行为


                                            <p><p>我的应用中有一个稍微定制的 UIPickerView。基本上我使用 <code>pickerView:viewForRow:forComponent:reusingView</code> 返回一个简单的 UILabel。当我开始着手让应用程序更易于访问时,我注意到 VoiceOver 会读取标签并添加,例如“3 of 300”(即总行数“的”行)。这不是我们想要的行为。</p>

<p>在尝试解决此问题时,我发现如果我使用 <code>pickerView:titleForRow:forComponent</code> 而不是 <code>pickerView:viewForRow:forComponent:reusingView</code>,而没有任何其他更改,那么我只需阅读所选行的“标题”即可获得 VoiceOver 的所需行为。我在 iOS 9 上对此进行了测试。</p>

<p>问题是:如何让 UIPickerView 恢复到“正常”的 VoiceOver 行为,同时仍然使用 <code>pickerView:viewForRow:forComponent:reusingView</code>?感谢您的帮助!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我向 Apple 支持寻求帮助。官方回复是:“我们的工程师已经审查了您的请求,并得出结论认为,鉴于目前的发货系统配置,没有支持的方式来实现所需的功能”。 (为了后代 - 这是最新的 iOS 版本是 9.4 的时候)。他们建议提出新功能的请求,我可以这样做。</p>

<p>为了解决这个问题,我采用了以下解决方法。</p>

<ul>
<li>创建了一个与我拥有的类几乎相同的基类,但只实现了 <code>pickerView:titleForRow:forComponent</code> 而不是 <code>pickerView:viewForRow:forComponent:reusingView</code>。本类(class)介绍 Vanilla 非自定义选择器。</li>
<li>创建了该基类的子类,现在实现 <code>pickerView:viewForRow:forComponent:reusingView</code>。本类(class)展示了一个完全自定义的选择器。</li>
<li>在我的其他代码中,使用 <code>UIAccessibilityIsVoiceOverRunning()</code> 在 VoiceOver 开启时创建基类对象,否则创建子类对象</li>
</ul>

<p>因此,当用户运行 VoiceOver 时,他们会得到一个外观丑陋的选择器,但在可访问性方面表现得非常好(即没有行号公告)。我认为这是一个完全合理的“妥协”,因为基本上可以保证用户不会关心视觉外观。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS - 自定义 UIPickerView 上的意外 VoiceOver 行为,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37041272/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37041272/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS - 自定义 UIPickerView 上的意外 VoiceOver 行为