【发布时间】:2014-07-14 20:59:44
【问题描述】:
我在 UITableView 中实现了一个内联 UIDatePicker,就像它们出现在其他 iOS 应用程序中一样,例如在日历中创建新事件时。
在通过 VoiceOver 使用该应用时,在用户选择日期并在表格视图单元格上双击关闭日期选择器后,日期选择器仍然可以访问。当日期选择器隐藏时,VoiceOver 会突出显示相应的单元格,但如果用户随后向右滑动,它将选择现在隐藏的 UIDatePicker 并允许他们与之交互。我希望它像在日历中一样选择下一个表格视图单元格。
我已阅读其他 SO 问题,隐藏视图仍然可以访问,为了防止这种情况发生,您可以在隐藏元素后将容器视图上的属性 accessibilityElementsHidden 设置为 YES 以让 VoiceOver知道它不再出现在屏幕上。但这对我不起作用。我还读到您应该发布布局更改通知,以便 VoiceOver 知道更新到当前 UI,但这也不起作用,隐藏视图仍然可以访问。
如何防止我隐藏的UIDatePicker 被访问?请注意,当表格加载时,隐藏的日期选择器无法访问。所以只有在它出现然后隐藏之后它仍然可以访问。
这是我在用户点击单元格时隐藏日期选择器的代码:
self.datePicker.hidden = YES;
self.datePicker.alpha = 0.0f;
self.datePickerCell.accessibilityElementsHidden = YES;
self.datePickerCell.contentView.accessibilityElementsHidden = YES;
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
在heightForRowAtIndexPath 中,datePickerCell 的高度在隐藏时更改为 0。请注意,datePicker 是 subview 的 datePickerCell。
【问题讨论】:
-
“但是如果用户向右滑动”是什么意思?此操作是否会打开另一个窗口(例如在导航控制器中 - 弹出当前窗口)?
-
@AleksandrMedvedev 不,在 VoiceOver 活动的情况下滑动会将突出显示切换到下一个元素。
-
你用的是静态还是动态的tableview?
-
@AleksandrMedvedev 静态
标签: ios objective-c uitableview uidatepicker voiceover