2013-05-01 13 views
8

Quando un UITableView è modificabile, il suo UITableViewCells consente all'utente di eseguire azioni personalizzate quando VoiceOver è attivo. L'utente può ascoltare le azioni disponibili scorrendo verso l'alto o verso il basso mentre il cursore VoiceOver si trova sulla cella e quindi invoca le azioni toccando due volte in qualsiasi punto dello schermo. Sono disponibili solo due azioni nelle mie celle: Elimina (invoca la solita eliminazione di cella) e Default (richiama un tocco sulla cella). La mia domanda è duplice:Azioni personalizzate VoiceOver in UITableViewCell

C'è un modo per aggiungere azioni personalizzate di VoiceOver a una cella?

Per impostazione predefinita l'azione Elimina viene letta come "Elimina" anche se la vista tabella delegato restituisce un titolo personalizzato nel metodo tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:. Come posso fare in modo che VoiceOver legga un titolo di azione personalizzato?

+0

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

+0

@Masih che ancora non risolve il problema. questa soluzione aiuta in realtà: https://stackoverflow.com/a/48689384/4723935 – Pavlos

risposta

10

Semplicemente non esiste un'API per fornire azioni personalizzate dell'elemento a VoiceOver. Il protocollo n. UIAccessibility* prevede che tutto ciò sia possibile. Immagino che dovresti presentare un radar se devi aggiungere azioni personalizzate e sperare che Apple lo implementerà in alcune versioni future di iOS (o che apparirà su iOS 7 in un mese).

UPDATE: Come di iOS 8, è possibile impostare/implementare la proprietà accessibilityCustomActions per restituire una matrice delle vostre UIAccessibilityCustomAction oggetti (si noti che VoiceOver sarà ancora aggiungere il "Attiva voce" azione di default nella sua interfaccia utente, oltre a quello che hai fornito):.

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

Come al solito con Swift e selettori, non dimenticate di aggiungere l'attributo @objc al metodo bersaglio dell'azione personalizzata a Swift se non sottoclasse NSObject/il metodo è privato, altrimenti nel tentativo di attivare l'azione con VoiceOver, non farà nulla e riprodurre il suono "end of bound reached" (almeno su iOS 8.2 e 8.3 dove ho testato con oggetto target che ha creato sottoclasse NSObject).

Per quanto riguarda la seconda domanda - si sente come un bug che si può ancora presentare un radar per :-)

+0

Esiste un modo per personalizzare il testo dell'azione predefinita? "Attiva oggetto" non è molto utile. – wangii

+1

No, poiché non esiste alcuna API per questo (non è inoltre possibile personalizzare l'hint predefinito sulla disponibilità di azioni personalizzate, ad esempio "Scorri verso l'alto o verso il basso ..."). –

+0

Solo un pensiero ma hai provato a rimuovere i tratti? Ad esempio, prova a rimuovere la caratteristica 'Button' e vedi se questo aiuta. (Sono lontano dal mio computer ora o lo proverei anch'io.) – MarqueIV

3

iOS 8 aggiunto il supporto per le azioni personalizzate app-definito. Da 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

quindi se aggiungo questo al file delle intestazioni avrò le azioni di accessibilità con Voice Over? – Pavlos