2016-07-20 12 views
8

W aplikacji Pogoda na iPhone'a podczas korzystania z VoiceOver zauważyłem, że po raz pierwszy dotykając sekcji, ogłosi ona sekcję.Jak zmusić VoiceOver do ogłoszenia etykiet sekcji w systemie iOS?

Na przykład w systemie iOS 9 dotknięcie dowolnego elementu środkowego paska po raz pierwszy spowoduje wyświetlenie "Prognoz godzinowych", zanim będzie można opisać element, który został naciśnięty. Naciśnięcie czegokolwiek innego na pasku nie ogłosi "prognoz godzinowych".

Stuknięcie w dowolne miejsce na dolnym stole spowoduje wyświetlenie "Prognozy dziennej", zanim będzie można opisać element, który został naciśnięty. Naciśnięcie cokolwiek innego w tej tabeli nie będzie poprzedzać prefiksem "Dzienne prognozy".

Czy istnieje prosty interfejs API do nazwania sekcji aplikacji? Czy musisz to zrobić ręcznie, śledząc kursor głosowy i dynamicznie zmieniając etykietę? (Czy to działa? Czy możesz zmienić etykietę dostępności po dotknięciu, ale przed odczytaniem?)

+0

Można użyć UIGestureRecognizer wykryć dotyk na którykolwiek UIView chciałeś użyć wartość logiczną do wskazania pogodę ogłosiły coś i używać AVSpeechUtterance ogłosić, co chcesz. – Jonathan

+0

@thealienisreal Przyszedłem tutaj z tym samym pytaniem. Czy kiedykolwiek miałeś szczęście? – djibouti33

+0

@ djibouti33 Bez powodzenia. Wiele odpowiedzi dotyczących ogólnej implementacji dostępności, ale żaden z nich nie rozwiązuje tego konkretnego scenariusza. – thealienisreal

Odpowiedz

0

Czy istnieje prosty interfejs API do nazwania sekcji Twojej aplikacji?

Wygląda na to, że najbardziej odpowiednią referencją jest Apple's Accessibility Programming Guide.

I jego API, Apple's UIAccessibility Documentation.

Ustawienie właściwości shouldGroupAccessibilityChildren wydaje się być najlepszym sposobem na osiągnięcie celu. Połączony API opisuje jak

wartość logiczną określającą, czy VoiceOver należy do jednej grupy elementów, które są dzieci odbiornika, niezależnie od ich położenia na ekranie. Ustawienie wartości tej właściwości na YES w widoku nadrzędnym elementów w pionowych kolumnach powoduje, że VoiceOver szanuje grupowanie aplikacji i prawidłowo je nawiguje.

warte pamiętać:

  1. Czy element docelowy element dostępność? (można sprawdzić za pomocą właściwości isAccessibilityElement; standardowe kontrole UIKit i widoki wdrożyć protokół UIAccessibility domyślnie)
    • Jeżeli tak, wystarczy ustawić jej dostępność atrybuty
    • Jeśli nie, trzeba zmienić jego wartość , view.isAccessibilityElement = true
  2. nieruchomość accessibilityLabel identyfikuje element
  3. nieruchomość accessibilityHint opisuje działanie wywołane przez element
  4. Atrybuty 0
  5. Można ustawić dostępność w serii ujęć
  6. Albo można ustawić atrybuty dostępność w realizacji Państwa zdanie podklasy
+0

Właściwość 'shouldGroupAccessibilityChildren' wpływa tylko na kolejność, w której kursor VoiceOver porusza się po elementach, ale ta wartość boolowska nie zapewnia sposobu na nazwanie sekcji. Opisujesz sposób etykietowania elementów, ale szukam sposobu na ogłaszanie nazwy sekcji po dotknięciu dowolnego elementu przed ogłoszeniem samego elementu w sekcji po raz pierwszy, gdy sekcja zyskuje fokus, tak jak robi to aplikacja pogodowa. – thealienisreal

+0

Czy ustawiłeś właściwość 'isAccessibilityElement' swojego widoku zawierającego na 'true'? Jeśli to zrobisz i pogrupujesz go z elementami potomnymi, to może to rozwiązać. –

+0

Jest możliwe, że aplikacja Apple Weather działa tak, jak wspomniano, ponieważ zawiera niestandardowe elementy w widoku kontenera. Z drugiej strony, widok kontenera zawiera inne elementy, z którymi użytkownicy mogą wchodzić w interakcje, na przykład w niestandardowej podklasie UIView, która wykonuje swój własny rysunek kształtów geometrycznych, kształty reprezentują elementy, z którymi użytkownicy mogą wchodzić w interakcje, i które są różni się od widoku kontenera takie osobne elementy w widoku kontenera nie są automatycznie dostępne (ponieważ nie są podklasami UIView). " Ta metoda może automatycznie ogłosić sekcję. –

2

Istnieją dwa podejścia Chyba:

  1. instacji UITableViewCell i przesłanianie etykiety dostępności.

    - (NSString *) accessibilityLabel 
    { 
        NSString* voiceOverString; 
        // append section title on voiceOverString and then the elements value 
        return voiceOverString; 
    } 
    
  2. Zobacz ten link z Apple docs: Ty możliwe, setAccessibilityLabel komórki z cellForRowAtIndexPath. Przykład dotyczy samej aplikacji pogodowej.

Powiązane problemy