在我的应用程序中,我有一个UIPickerView作为表格单元格的contentView的子视图。我在表视图中禁用滚动,并且在正常情况下安排正常。但是,我发现当VoiceOver(或辅助功能检查器)打开时,一旦选择器到达焦点,应用程序就会崩溃。
错误是:
-[UITableViewCellAccessibilityElement numberOfComponents]: unrecognized selector sent to instance 0xc15dc70
似乎正在发生的事情是,VoiceOver正在向UITickerViewAccessibilityElement发送可能用于UIPickerView(或其自己的UIAccessibilityElement?)的消息。
当我使用以下类别修补UIAccessibilityElement时......
@implementation UIAccessibilityElement (GMPatches)
- (NSInteger)numberOfComponents {
return 0;
}
@end
...我消除了崩溃 - 但现在,毫不奇怪,VoiceOver无法更改UIPickerView值。
如果我在此上下文中将其更改为真值...
@implementation UIAccessibilityElement (GMPatches)
- (NSInteger)numberOfComponents {
return 1;
}
@end
...然后VoiceOver发送下一个错误的消息,再次降低所有内容:
-[UITableViewCellAccessibilityElement selectedRowInComponent:]: unrecognized selector sent to instance 0x1e97b0
我很确定这是一个iOS错误。
我尝试在选择器,表格单元格和表格单元格的内容视图中设置isAccessibilityElement = NO
,但这些都没有帮助。
我想我可能能够扩展上面的UIAccessibilityElement类别,将各种消息转发到其父单元的子UIPickerView。但这感觉就像令人不快的脆弱的hackery。
有什么更好的想法我可以解决这个问题吗?
答案 0 :(得分:1)
当我设置tableView.tableHeaderView = myUITextField
并在系统设置应用中启用VoiceOver时,我遇到了同样的崩溃。当我将myUITextField包装在UIView中然后将其分配给tableView.tableHeaderView时,问题已经解决了。
我相信这将是iOS 9或更高版本中的错误,因为UITextField也是UIView的子类。
答案 1 :(得分:0)
您面临的问题必须以不同方式解决。您正在尝试将UIPicker添加到UITableCell,但这是不可能的。看起来无法确定您是否实际滚动/选择了表格单元格或UIPicker。
要解决此问题,请将另一个视图推送到包含UIPicker的表。