В моем приложении у меня есть UIPickerView как подпредставление contentView ячейки таблицы. Я отключаю прокрутку в табличном представлении, и устройство работает нормально при нормальных обстоятельствах. Однако я обнаружил, что при включении VoiceOver (или инспектора специальных возможностей) приложение вылетает, как только сборщик должен получить фокус.
Ошибка:
-[UITableViewCellAccessibilityElement numberOfComponents]: unrecognized selector sent to instance 0xc15dc70
Кажется, что происходит, что VoiceOver отправляет сообщения, предположительно предназначенные для UIPickerView (или его собственного UIAccessibilityElement?), Вместо этого в UITableViewAccessibilityElement.
Когда я исправляю 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 его родительской ячейки. Но это похоже на неприятно хрупкое хакерство.
Есть лучшие идеи, как мне обойти это?