Пользовательские действия VoiceOver в UITableViewCell

Когда UITableView доступен для редактирования, его UITableViewCells позволяют пользователю выполнять настраиваемые действия, когда VoiceOver включен. Пользователь может услышать доступные действия, проведя пальцем вверх или вниз, когда курсор VoiceOver находится на ячейке, а затем вызвать действия, дважды нажав в любом месте экрана. В моих ячейках доступны только два действия: Удалить (вызывает обычное удаление ячейки) и По умолчанию (вызывает касание ячейки). У меня двоякий вопрос:

Есть ли способ добавить в ячейку собственные действия VoiceOver?

По умолчанию действие Удалить читается как «Удалить», даже если делегат табличного представления возвращает настраиваемый заголовок в методе tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:. Как заставить VoiceOver зачитывать заголовок настраиваемого действия?


person Alexey Blinov    schedule 01.05.2013    source источник
comment
stackoverflow.com/a/45643931/4995771   -  person Masih    schedule 13.08.2017
comment
@Masih, который все еще не решает проблему. это решение действительно помогает: stackoverflow.com/a/48689384/4723935   -  person Pavlos    schedule 12.02.2018


Ответы (2)


API для предоставления действий настраиваемых элементов в VoiceOver просто не существует. Никакой UIAccessibility* протокол не предусматривает ничего для этого. Думаю, вам следует подать радар, если вам нужно добавить настраиваемые действия, и надеюсь, что Apple реализует его в какой-нибудь будущей версии iOS (или что он появится в iOS 7 через месяц).

ОБНОВЛЕНИЕ. Начиная с iOS 8, вы можете установить / реализовать _ 2_ свойство, чтобы вернуть массив вашего _ 3_ объекты (обратите внимание, что VoiceOver по-прежнему будет добавлять действие по умолчанию« Активировать элемент »в свой пользовательский интерфейс в дополнение к тому, что вы предоставляете.):

self.accessibilityCustomActions = [
    UIAccessibilityCustomAction(name: NSLocalizedString("Close", comment: ""), target: self, selector: "didPressClose")
]
...
@objc
func didPressClose() -> Bool {
    ...
}

Как обычно со Swift и селекторами, не забудьте добавить _ 5_ для целевого метода настраиваемого действия в Swift, если вы не подклассифицируете NSObject / метод является частным, в противном случае при попытке активируйте действие с помощью VoiceOver, он ничего не сделает и воспроизведет звук «достигнут конец границ» (по крайней мере, в iOS 8.2 и 8.3, где я тестировал целевой объект, имеющий подкласс NSObject).

Что касается вашего второго вопроса - похоже на ошибку, на которую вы снова можете подать радар :-)

person Boris Dušek    schedule 01.05.2013
comment
Есть ли способ изменить формулировку действия по умолчанию? Активировать элемент не очень помогает. - person wangii; 29.01.2016
comment
Нет, поскольку для этого нет API (также невозможно настроить подсказку по умолчанию о доступности настраиваемых действий, например, смахивание вверх или вниз ...). - person Boris Dušek; 29.01.2016
comment
Просто мысль, а вы пробовали убирать черты? Например, попробуйте удалить черту «Кнопка» и посмотрите, поможет ли это. (Я сейчас далеко от своего компьютера, или я бы сам его протестировал.) - person Mark A. Donohoe; 20.09.2016
comment
Вам удалось исправить эту проблему? Используя решение @ BorisDušek, я могу слышать с помощью VoiceOver, и я могу выбрать действие, но на самом деле я не могу удалить с его помощью ячейку. причина в том, что я не могу передать indexPath.row с помощью #selector .. Пожалуйста, дайте мне знать, если у вас есть какое-либо решение - person Pavlos; 12.02.2018
comment
В случае, если кто-то еще не может заставить это работать сначала: при реализации этого убедитесь, что ваш целевой метод возвращает логическое значение. Иначе не получится. - person Adrian Schönig; 05.04.2019

В iOS 8 добавлена ​​поддержка настраиваемых действий, определяемых приложением. От 1_:

/*
 Return an array of UIAccessibilityCustomAction objects to make custom actions for an element accessible to an assistive technology.
 For example, a photo app might have a view that deletes its corresponding photo in response to a flick gesture.
 If the view returns a delete action from this property, VoiceOver and Switch Control users will be able to delete photos without performing the flick gesture.
 default == nil
 */
@property (nonatomic, retain) NSArray *accessibilityCustomActions NS_AVAILABLE_IOS(8_0);
person jszumski    schedule 24.11.2014
comment
так что, если я добавлю это в файл заголовков, у меня будут действия со специальными возможностями с помощью Voice Over? - person Pavlos; 12.02.2018