2013-05-01 9 views
8

Wenn eine UITableView bearbeitbar ist, kann der Benutzer mithilfe von UITableViewCells benutzerdefinierte Aktionen ausführen, wenn VoiceOver aktiviert ist. Der Benutzer kann die verfügbaren Aktionen hören, indem er nach oben oder unten wischt, während sich der VoiceOver-Cursor in der Zelle befindet, und anschließend die Aktionen durch Doppelklicken auf eine beliebige Stelle auf dem Bildschirm aufrufen. In meinen Zellen stehen nur zwei Aktionen zur Verfügung: Löschen (ruft die übliche Zelllöschung auf) und Standard (ruft eine Berührung der Zelle auf). Meine Frage ist zweifach:Benutzerdefinierte VoiceOver-Aktionen in UITableViewCell

Gibt es eine Möglichkeit, benutzerdefinierte VoiceOver-Aktionen zu einer Zelle hinzuzufügen?

standardmäßig die Löschen Aktion ausgelesen als „Löschen“, auch wenn die Tabellenansicht Delegierten einen eigenen Titel in der tableView:titleForDeleteConfirmationButtonForRowAtIndexPath: Methode gibt. Wie kann ich VoiceOver einen benutzerdefinierten Action-Titel vorlesen lassen?

+0

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

+0

@Masih, die immer noch das Problem nicht beheben. Diese Lösung hilft tatsächlich: https://stackoverflow.com/a/48689384/4723935 – Pavlos

Antwort

10

Es gibt einfach keine API für die Bereitstellung von benutzerdefinierten Elementaktionen für VoiceOver. No UIAccessibility* Protokoll bietet alles dafür. Ich schätze, Sie sollten ein Radar einreichen, wenn Sie benutzerdefinierte Aktionen hinzufügen müssen und hoffen, dass Apple es in einer zukünftigen Version von iOS implementieren wird (oder dass es in iOS 7 in einem Monat erscheint).

UPDATE: Ab iOS 8, können Sie die accessibilityCustomActions Eigenschaft/implementieren eine Reihe von Ihrer UIAccessibilityCustomAction Objekte zurückzukehren (beachten Sie, dass Voiceover wird noch die Standard-Aktion in seiner UI neben „Item aktivieren“ hinzufügen was Sie zur Verfügung stellen).

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

Wie üblich bei Swift und Selektoren, nicht zu vergessen das @objc Attribut auf die Zielmethode der benutzerdefinierten Aktion in Swift hinzufügen, wenn Sie nicht NSObject keine Unterklasse/das Verfahren privat, sonst wird beim Versuch, die Aktion mit VoiceOver zu aktivieren, nichts unternommen und spiele das "Ende der Grenzen erreicht" -Ton (zumindest auf iOS 8.2 und 8.3, wo ich mit dem Zielobjekt getestet habe, das die Unterklasse NSObject hatte).

Ihre zweite Frage Bezug - fühlt sich wie ein Fehler, der Sie wieder ein Radar für :-)

+0

Gibt es eine Möglichkeit, den Wortlaut der Standardaktion anzupassen? "Element aktivieren" ist nicht wirklich hilfreich. – wangii

+1

Nein, da es keine API dafür gibt (es ist auch nicht möglich, den Standardhinweis über die Verfügbarkeit von benutzerdefinierten Aktionen anzupassen, d. H. Das "Wischen nach oben oder unten ..."). –

+0

Nur ein Gedanke, aber hast du versucht, Eigenschaften zu entfernen? Versuchen Sie zum Beispiel, das Merkmal 'Button' zu entfernen und sehen Sie, ob das hilft. (Ich bin jetzt von meinem Computer weg oder ich würde es selbst testen.) – MarqueIV

3

iOS 8-Unterstützung für definierte App Aktionen benutzerdefinierte Datei kann. Von 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

Also wenn ich dies zu Header-Datei hinzufügen Ich habe die Barrierefreiheit Aktionen mit Voice Over? – Pavlos