2013-05-01 80 views
8

UITableView可編輯時,其UITableViewCells允許用戶在VoiceOver打開時執行自定義操作。用戶可以在VoiceOver光標位於單元格上時通過向上或向下滑動來聽到可用操作,然後通過雙擊屏幕上的任意位置來調用操作。我的單元格中只有兩種可用的操作:刪除(調用通常的單元格刪除)和默認(調用單元格上的一個水龍頭)。我的問題是雙重的:UITableViewCell中的自定義VoiceOver操作

有沒有將自定義VoiceOver操作添加到單元格的方法?

默認情況下,刪除即使表視圖委託在tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:方法中返回自定義標題,操作也會作爲「刪除」讀出。如何讓VoiceOver讀出自定義動作標題?

+0

https://stackoverflow.com/a/45643931/4995771 – Masih 2017-08-13 20:09:33

+0

@Masih仍不能解決問題。這個解決方案實際上有幫助:https://stackoverflow.com/a/48689384/4723935 – Pavlos 2018-02-12 13:58:35

回答

10

沒有簡單的API來爲VoiceOver提供自定義元素操作。沒有UIAccessibility*協議提供了任何這個可能。如果您需要添加自定義操作,並且希望Apple將在未來某個版本的iOS中實現它(或者它將在一個月內出現在iOS 7中),我想您應該提交一份雷達。

UPDATE:由於iOS的8,你可以設置/實行accessibilityCustomActions財產來回報您UIAccessibilityCustomAction對象的數組(請注意,VoiceOver會仍然會添加「啓動項目」,在其除了UI默認操作你提供什麼樣的):

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

像往常一樣用斯威夫特和選擇,不要忘記將@objc屬性添加到斯威夫特的自定義操作的目標方法,如果你不繼承NSObject /方法是私人的,否則試圖用VoiceOver激活這個動作,它不會做任何事情播放「達到邊界」聲音(至少在iOS 8.2和8.3中,我使用目標對象進行測試,該目標對象的子類爲NSObject)。

關於你提到的第二個問題 - 感覺就像你可以再次提交雷達:-)

+0

有沒有一種方法來定製默認操作的措辭? 「激活項目」不是很有幫助。 – wangii 2016-01-29 10:08:30

+1

不,因爲沒有API(也無法自定義有關自定義操作可用性的默認提示,即「向上或向下滑動...」)。 – 2016-01-29 10:26:52

+0

只是一個想法,但你有沒有嘗試刪除特質?例如,嘗試刪除「按鈕」特徵,看看是否有幫助。 (我現在遠離電腦,或者我自己測試它。) – MarqueIV 2016-09-20 17:14:05

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 2018-02-12 11:43:55