【问题标题】:How can I avoid a crash when VoiceOver encounters UIPickerView as subview of UITableViewCell contentView?当 VoiceOver 遇到 UIPickerView 作为 UITableViewCell contentView 的子视图时,如何避免崩溃?
【发布时间】:2010-09-11 17:16:59
【问题描述】:

在我的应用程序中,我有一个 UIPickerView 作为表格单元格内容视图的子视图。我禁用了表格视图中的滚动,并且在正常情况下安排工作正常。但是,我发现当 VoiceOver(或 Accessibility Inspector)打开时,只要选择器获得焦点,应用就会崩溃。

错误是:

-[UITableViewCellAccessibilityElement numberOfComponents]: unrecognized selector sent to instance 0xc15dc70

似乎正在发生的事情是,VoiceOver 正在向 UITableViewAccessibilityElement 发送可能用于 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。但这感觉就像是令人不快的脆弱骇客。

有什么更好的想法可以解决这个问题吗?

【问题讨论】:

  • 嗯,我刚刚在 IB 中放置了一些 appkit 的东西,我遇到了一些非常疯狂的崩溃。我很确定其中有很多错误。
  • Justin Meiners:不过,那是 Cocoa。 jawj 询问有关 Cocoa Touch 的问题。
  • 向 Apple 提交错误。除此之外,我不知道。

标签: iphone cocoa-touch uikit uitableview uipickerview


【解决方案1】:

当我在系统设置应用程序中设置tableView.tableHeaderView = myUITextField 并打开 VoiceOver 时,我遇到了同样的崩溃。现在,当我将 myUITextField 包装在 UIView 中,然后将其分配给 tableView.tableHeaderView 时,问题已经解决。

我相信这将是 iOS 9 或更高版本的错误,因为 UITextField 也是 UIView 的子类。

【讨论】:

  • 谢谢!您对为什么会崩溃有任何见解吗?在 tableHeaderView 中使用可访问性时 UITextField 会崩溃似乎真的很随意,考虑到它在其他任何地方都可以正常工作。
【解决方案2】:

您面临的问题必须以不同的方式解决。您正在尝试将 UIPicker 添加到 UITableCell,但这是不可能的。似乎无法确定您是否实际滚动/选择了表格单元格或 UIPicker。

要解决此问题,请将另一个视图推送到包含 UIPicker 的表。

【讨论】:

猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多