Co oznacza to kryterium
Każdą funkcję musi dać się wykonać przez interfejs klawiatury, bez szybkiego powtarzania naciśnięć lub trzymania klawisza przez określony czas. Może to być inna kontrolka osiągająca ten sam cel. Wyjątek dotyczy funkcji zależnej od całego toru ruchu, np. swobodnego malowania; samo przeciąganie go nie tworzy.
To pomaga osobom z ograniczeniami ruchowymi, korzystającym z klawiatur alternatywnych lub przełączników dostarczających klawisze, a także osobom niewidomym i słabowidzącym, które nie śledzą wskaźnika. Nie każdy tryb Switch Control emuluje klawiaturę. Semantyka i obsługa czytnika wymagają osobnej oceny.
Przykłady błędów i poprawek
Adres punktu: Tab, przerwa i aktywacja
Własna „Pracownia” pokazuje syntetyczne zamówienie #1042 i adres ul. Przykładowa 10. Wszystkie warianty mają te same dane. Materiały pochodzą z Flutter/Cupertino na iPhone 17 Simulator, iOS 26.5, z 2026-10-02.
- W good Tab przenosi fokus na „Pokaż adres”. Adres pozostaje ukryty.
- Po 7 sekundach bez działania Space ujawnia adres. Obserwator potwierdził odebranie klawisza; nie wykonywał akcji.
- Dalszy Tab prowadzi do czyszczenia wyniku, wyboru wariantu i resetu. Space wykonuje te działania, a Shift+Tab prowadzi wstecz.

Stan przed aktywacją. Sam obraz nie potwierdza klawisza ani czasu oczekiwania.

Rezultat odebranego Space; sekwencję wejścia potwierdzały źródłowe obserwacje XCTest i Fluttera.
Fokus i rola przycisku bez działania
- Problem
- Tab osiąga Pokaż adres, ale odebrany Space nie ujawnia adresu. Kontrolka korzysta tylko z GestureDetector.onTap.
- Skutek
- Osoba obsługująca ekran klawiaturą nie może wykonać funkcji; w tym wariancie nie ma innej drogi.
- Poprawka
- Użyj standardowego CupertinoButton z tą samą akcją albo zapewnij własnej kontrolce pełną nawigację i aktywację klawiaturową.

Odtworzona bariera. Oddzielny test tap ujawnił identyczny adres, potwierdzając tylko działanie dotykiem.
Bad ma Focus, nazwę i semantyczną rolę przycisku, lecz nie ma ActivateIntent ani semantycznej akcji tap. Ograniczona semantyka wpływa także na inne wymagania; przykład nie izoluje wszystkich kryteriów.
Równoważna funkcja jest dostępna inną drogą
Control zachowuje pierwszą niesprawną kontrolkę i dodaje standardowy „Pokaż adres ponownie”. Space na pierwszej nie działa. Następny Tab osiąga alternatywę, a Space ujawnia ten sam adres. Pierwsze niepowodzenie nie wystarcza więc do negatywnej oceny całej funkcji. To kontrola ryzyka fałszywego alarmu, bez rekomendacji dublowania wadliwych przycisków.

Ta sama funkcja osiągnięta skuteczną alternatywą. Zrzut jest końcowym stanem sekwencji.
Kiedy obowiązuje i gdzie są wyjątki
Interfejs klawiatury i tempo
Zakres obejmuje menu, dialogi, formularze, zmianę kolejności, powiększenie, media i funkcje pojawiające się po interakcji. Liczy się możliwość osiągnięcia wyniku, a nie tylko fokus lub nazwa kontrolki.
Interfejs klawiatury może odbierać klawisze z urządzenia fizycznego, alternatywnego sprzętu lub emulacji. MouseKeys zamieniające klawisze w ruch wskaźnika nadal używają interfejsu wskaźnika. Tap XCTest i akcja czytnika też nie potwierdzają klawiatury. Własna klawiatura ekranowa sterowana dotykiem nie zastępuje niezależnej od urządzenia usługi platformy; nie trzeba tworzyć własnej, gdy system już ją zapewnia.
Nie uzależniaj akcji od dwóch naciśnięć w krótkim oknie ani od określonego przytrzymania. Zwykłe naciśnięcia mogą mieć dowolne przerwy; uwzględnij ustawienia takie jak Sticky Keys. Osobny limit czasu procesu wymaga odrębnej oceny. Siedmiosekundowa próba jest jedną obserwacją, nie dowodem wszystkich odstępów. Enter i Space są konwencjami przycisku; 2.1.1 nie wymaga obu jednocześnie.
Funkcja zależna od toru ruchu
Swobodne malowanie zachowuje przebieg pociągnięcia, więc może korzystać z wyjątku. Wybór narzędzia i zapis nadal wymagają klawiatury. Rozpoznawanie pisma jest techniką wprowadzania tekstu; jego cel nie korzysta z tego wyjątku.
Przeniesienie karty do kolumny, zmiana kolejności zdjęć, prosta linia lub regularny kształt zależą od obiektu, punktów i wyniku. Dodaj „Przenieś do…”, „Wyżej/Niżej” lub współrzędne z obsługą klawiatury. Alternatywa wyłącznie dotykowa nie wystarczy dla 2.1.1. Tych scenariuszy drag/drop i rysowania nie wykonywano w źródle.
Duplikat kontrolki nie musi przyjmować klawiszy, jeśli ta sama lub porównywalna funkcja jest w pełni dostępna inną drogą. Pomocnicze G202/G90/H91 opisują inwentaryzację, równoważne klawisze i standardowe kontrolki. F54/F42/F55 wskazują wzorce handlera tylko dla wskaźnika, emulowanego linku i usuwania fokusu; nie są danymi o częstości ani automatycznym werdyktem.
Platformy
Klasyfikacja AI pochodzi z 2026-10-02. Dla WWW podstawą jest WCAG 2.2 Recommendation 2024-12-12, dla pozostałych środowisk informacyjne WCAG2ICT Group Note 2025-12-11. Nie jest to ustalenie obowiązku prawnego.
| Środowisko | Zakres i adaptacja | Wykonanie źródłowe |
|---|---|---|
| WWW, także telefon | Wszystkie funkcje treści; brak fizycznej klawiatury telefonu nie wyłącza wymagania. | Bez przeglądarki. |
| Natywne aplikacje mobilne | Platforma udostępnia niezależną od urządzenia usługę klawiatury; iOS/Android ją zapewniają. | Tylko Flutter/iOS Simulator. |
| Desktop | Ten sam warunek usługi; bez zmiany treści wymagania. | Niewykonane. |
| Dokumenty | Linki, formularze i kontrolki we właściwym odbiorniku. Statyczny akapit nie musi być przystankiem Tab. | Niewykonane. |
| Kiosk lub telewizor | Ustal usługę klawiatury/substytutu. Jej brak wymaga oceny zamkniętej funkcjonalności i sprzętu. | Niewykonane. |
W hybrydzie oceń część webową, natywną i przejście między nimi. Brak testu nie wyłącza zastosowania.
Rozwiązania w technologiach
Fragmenty wykonują tę samą akcję co dotyk. Przegląd dokumentacji w źródle: 2026-10-02. Build Fluttera nie potwierdza pozostałych implementacji.
Flutter
import 'package:flutter/cupertino.dart';
// Wewnątrz build; showAddress wykonuje tę samą funkcję co dotyk.
CupertinoButton(
onPressed: showAddress,
child: const Text('Pokaż adres'),
)Osadź w build z istniejącą akcją showAddress. Standardowa kontrolka ma nawigację, fokus i ActivateIntent; Semantics(button: true) samo ich nie zapewnia. Pełna demonstracja Flutter 3.44.9 / Dart 3.12.2: analiza, host, build i przebieg iOS PASS. Skrócony fragment nie jest osobno uruchomioną aplikacją; Android niewykonany.
Android / Compose
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@Composable
fun AddressAction(showAddress: () -> Unit) {
Button(onClick = showAddress) { Text("Pokaż adres") }
}Button korzysta z clickable obsługującego Enter/Space. Własny pointerInput nie jest równoważnym zamiennikiem. Sprawdź Tab i cały przepływ. Oficjalna dokumentacja sprawdzona; kompilacja i działanie niewykonane.
iOS / SwiftUI
import SwiftUI
struct AddressAction: View {
let showAddress: () -> Void
var body: some View {
Button("Pokaż adres (⌘⇧A)", action: showAddress)
.keyboardShortcut("a", modifiers: [.command, .shift])
}
}Skrót Command+Shift+A jest dodatkową ujawnioną drogą do showAddress. Nie zastępuje innych funkcji. Dokumentacja i typecheck Xcode 27.0 / SDK Simulator 27.0, arm64/iOS 17: PASS. SwiftUI runtime i FKA niewykonane.
React Native
import { Button } from 'react-native';
export function AddressAction({ showAddress }: { showAddress: () => void }) {
return <Button title="Pokaż adres" onPress={showAddress} />;
}Standardowy Button jest podstawą zamiast gestu na View. onPress, accessibilityRole i onAccessibilityAction nie dowodzą keyboard-only. View.focusable/tabIndex dotyczą Androida; nie przenoś ich na iOS. Jeśli adapter nie udostępnia funkcji, dodaj obsługę natywną, np. responder/keyCommands, i ją sprawdź. Dokumentacja sprawdzona; kompilacja i runtime niewykonane.
WWW
<button type="button">Pokaż adres</button>Podepnij jedną akcję click do przycisku; do nawigacji użyj linku z href. Sama rola na klikanej dekoracji nie wystarczy. Fragment edukacyjny bez uruchomienia w przeglądarce.
Jak sprawdzić
- Spisz funkcje i ich cele, w tym stany pośrednie, podmenu, przewijanie i gesty. Dla wyjątku uzasadnij zależność od całej trajektorii.
- Zapisz system, odbiornik, wejście, układ i ustawienia. Oddziel klawiaturę aplikacji, FKA, VoiceOver i emulację wskaźnika.
- Bez dotyku nawiguj i aktywuj komendami platformy. Sprawdź wynik, zrób przerwę między klawiszami i zbadaj reguły czasu w handlerach.
- Po nieskutecznej kontrolce sprawdź równoważne drogi. Zapisz wysłane/odebrane zdarzenia, fokus i wynik; brak odbioru jest ograniczeniem próby.
- Sprawdź pozostałe funkcje i osiągnięte stany. Screenshot, callback, drzewo lub tap nie zastępują tej sekwencji.
Weryfikacja i ograniczenia
Historyczne wykonanie 2026-10-02 dotyczy wyłącznie opisanej trasy: ujawnienia adresu, czyszczenia, wyboru wariantu i resetu. XCTest wysyłał klawisze do uruchomionego Fluttera; HardwareKeyboard obserwował je, zwracając false.
| Sprawdzenie | Wynik źródła |
|---|---|
| Analiza, host, build iOS | PASS; 13 testów hostowych. Hostowy adapter Material nie jest Androidem. |
| XCTest | PASS, 2 testy, 0 failures, 158,438 s; Tab/Shift+Tab/Space oraz oddzielny tap w bad. |
| Funkcje | Good: wszystkie cztery dostępne; bad: Space nie pokazuje adresu; control: alternatywa działa. PASS odtworzenia bad oznacza potwierdzenie bariery. |
| Materiały | 8 PNG, 8 snapshotów, 27 próbek i 33 żądania; pokazane tu cztery kadry. Wszystkie PNG obejrzała AI. |
| Czas | 7 s przerwy w każdym wariancie i brak timera w kodzie; skończony zakres obserwacji. |
| SwiftUI | Typecheck PASS; bez uruchomienia. |
| Enter na iOS | Niewykonany jako poprawnie dostarczony klawisz: Return nie dawał zdarzenia, Enter wygenerował Ctrl+C. Hostowy Enter nie zmienia tego braku. |
| FKA, sprzęt, Sticky Keys, VoiceOver, pozostałe platformy i człowiek | Niewykonane. Dostępność sparowanego iPhone’a nie potwierdza jego testu. |
Nie nagrywano filmu/audio. Fokus pochodzi z Fluttera, nie z FKA czy VoiceOver. Drzewo i nazwa nie ujawniają wszystkich alternatyw. Wynik dotyku nie rozstrzyga klawiatury, a skończone próbki odstępów nie potwierdzają wszystkich czasów. Niezależnego walidatora nie uruchomiono; metadane oczekiwań, warianty i węzeł obserwatora powinny pozostać poza jego wejściem. Brak znaleziska przy niepełnej inwentaryzacji nie oznacza spełnienia wymagania.
Jak sprawdza Clearship
Metoda z 2026-10-07 porównuje na Androidzie funkcje dostępne dotykiem ze stanami fokusu i aktywacją w przejściu klawiatury. Wskazuje kandydatów: cel nieosiągalny, brak skutku Space/Enter przy działającym tap lub instrukcję gestu bez drogi klawiaturowej. Pomiar kontrolny 16/18, bez fałszywych alarmów na 80 poprawnych ekranach, nie spełnił progu; wynik wymaga człowieka.
Fokus poza drzewem, możliwa równoważna droga i nieosiągnięty stan pozostają nierozstrzygnięte. Funkcje bez akcji i instrukcji w drzewie, tempo klawiszy, inne skróty i osobna treść webowa nie są oceniane. iOS nie ma tego przejścia klawiatury ani pomiaru. Researchowa próba iOS z tego artykułu nie jest wykonaniem analizatora produktu.