2013-05-01 3 views
8

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

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

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

+0

https://stackoverflow.com/a/45643931/4995771 – Masih

+0

@Masih, что до сих пор не удалось устранить проблему. это решение действительно помогает: https://stackoverflow.com/a/48689384/4723935 – Pavlos

ответ

10

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

UPDATE: С прошивкой 8, вы можете установить/реализовать accessibilityCustomActions свойство возвращает массив ваших UIAccessibilityCustomAction объектов (обратите внимание, что VoiceOver будет еще добавить «активировать пункт» действия по умолчанию в его интерфейсе в дополнение к то, что вы предоставляете).

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

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

Что касается второго вопроса - чувствует, как клопа, который вы можете снова подать радар :-)

+0

Есть ли способ настроить формулировку действия по умолчанию? «активировать элемент» не очень полезно. – wangii

+1

Нет, поскольку для этого нет API (также невозможно настроить подсказку по умолчанию о доступности пользовательских действий, то есть «Проведите вверх или вниз ...»). –

+0

Просто мысль, но вы пытались удалить черты? Например, попробуйте удалить признак «Button» и посмотреть, помогает ли это. (Я сейчас далеко от своего компьютера, или я бы сам его протестировал.) – MarqueIV

3

IOS 8 добавлена ​​поддержка приложений определенных пользовательских действий. От UIAccessibility.h:

/* 
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); 
+0

, поэтому, если я добавлю это в файл заголовков, у меня будут действия доступности с помощью Voice Over? – Pavlos

Смежные вопросы