
Ako vytvoriť úspešnú aplikáciu pre iOS s využitím prehliadaných funkcií iOS

14. Mar 2025
iOSMobilné aplikácie sú dnes našou digitálnou predĺženou rukou – riešime pomocou nich prácu, komunikujeme, nakupujeme, zabávame sa. No čo ak sa niektorí používatelia k týmto možnostiam nedostanú len preto, že dizajn aplikácie nepočíta s ich potrebami?
Prístupnosť nie je len formálna požiadavka – je to spôsob myslenia, ktorý zaručuje, že aplikácie sú použiteľné pre všetkých bez ohľadu na zrakové 👁️, motorické 👏🏽, sluchové 👂🏽 či kognitívne 🧠 znevýhodnenia. ✨ V tomto článku si ukážeme konkrétny príklad, kde porovnáme neprístupnú a prístupnú obrazovku mobilnej aplikácie.
🔍 Čo si ukážeme?
✔️ Čo robí aplikáciu neprístupnou a aké prekážky vytvára 🚧
✔️ Ako môže vyzerať vyladená, prístupná verzia 💡
✔️ Praktické tipy, ktoré môžete aplikovať vo svojich projektov 🛠️
Či už ste dizajnér, vývojár alebo produktový manažér, pochopenie týchto princípov vám pomôže tvoriť aplikácie, ktoré nesegregujú, ale spájajú. Poďme na to! 🚀
Pozrime sa na čísla:
V prvom rade si ukážeme ako to vyzerá pri prvom vstupe.
Na obrázku vľavo je hneď na úvod vidno prvý problém. Neprístupná obrazovka skočí ako prvé pri vstupe na fotku a prečita pristupný názov, ktorý v tomto prípade chýba, takže Screen Reader prečíta len „Fotka, Space”. Keďže ide o fotku z URL adresy, nie je možné ísť do assetov a pomenovať fotku priamo tam. (Ak by bola fotka pomenovaná jablko.jpg, tak pri nešpecifikovanom prístupnom názve sa použije názov súboru.) Následne po prečítaní skočí hneď na tlačilo srdca pod obrázkom jablka a prečíta „Páči sa mi, Tlačidlo”.
Tento prístup má viacero nedostatkov:
Vpravo si všimnete, že akonáhle som vstúpil do položky „jablko”, prechádzam na primárnu akciu položky, a to je pridanie do košíka. Screen Reader číta: „Pridať do košíka produkt Jablko”. Toto tlačidlo dáva používateľovi plný kontext a presne vie, čo má od tlačidla očakávať pri jeho stlačení. Toto sme dosiahli ignorovaním obrázka v obsahu a pridaním popisov jednotlivých komponentov dynamicky podľa obsahu.
// Modifikátor použitý na komponent obrázka.
.accessibilityHidden(true)
// Modifikátor použitý na komponent tlačidla pridania do košíka.
.accessibilityLabel("Pridať do košíka produkt \(productName)")
Pozrime sa, ako to vyzerá s informáciami, ktoré sú zapísané v tabuľke.
Akonáhle chcem prečítať obsah tabuľky, veľmi rýchlo zistím, že aj keď vizuálne tabuľka funguje, keď začnem cyklovať cez elementy, čítam najskôr „Hmotnosť” a hneď nato „Farba”, a až potom prechádzam na ďalší riadok, kde číta „125g” a „Červená”.
Grid {
GridRow {
VStack {
Text("Hmotnosť")
Text("125 g")
}
VStack {
Text("Farba")
Text("Červená")
}
}
GridRow {
VStack {
Text("Krajina pôvodu")
Text("Slovensko")
}
VStack {
Text("Nutričné hodnoty")
Text("52 kcal")
}
}
}
Opäť, zmätenie používateľa prechádzajúceho touto obrazovkou musí byť obrovské.
Vpravo sme sprístupnili čítanie obsahu tak, že sme spojili do jednej accessibility skupiny názov a hodnotu v tabuľke. Toto má za následok, že Screen Reader automaticky číta: „Hmotnosť: 125g”.
Grid {
GridRow {
VStack {
Text("Hmotnosť")
Text("125 g")
}
.accessibilityElement(children: .combine)
VStack {
Text("Farba")
Text("Červená")
}
.accessibilityElement(children: .combine)
}
GridRow {
VStack {
Text("Krajina pôvodu")
Text("Slovensko")
}
.accessibilityElement(children: .combine)
VStack {
Text("Nutričné hodnoty")
Text("52 kcal")
}
.accessibilityElement(children: .combine)
}
}
Celistvosť tejto informácie spôsobí pre používateľa úplne iný zážitok z aplikácie.
Následne sa pozrieme na jednoduchý komponet hodnotenia produktu.
Keď sa presuniem v neprístupnom flowe na komponent hodnotenia, automaticky ma posunie na prvú hviezdičku ako prvé akčné tlačidlo z komponentu a čítačka zahlási: „Pridať medzi obľúbené, Tlačidlo”.
Keď začnem prechádzať zľava doprava, hlási to isté na každej hviezdičke. Pre nevidiaceho je veľmi ťažké až nemožné domyslieť si, čo sa deje na obrazovke.
@State var rating: Int = 1
var body: some View {
HStack {
ForEach(1..<6) { index in
Button(action: { rating = index }) {
Image(systemName: index <= rating ? "star.fill" : "star")
}
}
}
}
Používateľ je opäť zmätený, pretože nevie, čo tlačidlá robia. V horšom prípade si myslí, že robia to, čo povedala čítačka: pridávajú medzi obľúbené, pričom on si bude myslieť, že pridáva produkt do obľúbených, ale v skutočnosti bude odosielať hodnotenie, ktoré neodzrkadľuje jeho skutočný názor.
V prístupnom flowe sme komponent hodnotenia zoskupili a pridali sme mu príznak „nastaviteľný” (adjustable).
Akonáhle sa v prístupnom flowe presunieme na hodnotenie, čítačka povie: „Hodnotenie produktu jablko 1 z 5, nastaviteľné”. Toto používateľovi naznačuje, že:
@State var rating: Int = 1
var body: some View {
HStack {
ForEach(1..<6) { index in
Button(action: { rating = index }) {
Image(systemName: index <= rating ? "star.fill" : "star")
}
}
}
.accessibilityElement()
.accessibilityLabel(Text("Hodnotenie"))
.accessibilityValue(Text(String(rating) + " z 5"))
.accessibilityAdjustableAction { direction in
switch direction {
case .increment:
guard rating < 5 else { break }
rating += 1
case .decrement:
guard rating > 1 else { break }
rating -= 1
@unknown default:
break
}
}
}
Ako vývojári máme obrovský vplyv na to, či bude aplikácia použiteľná pre všetkých, alebo či bude pre časť používateľov jednoducho neprístupná. Ako sme videli v príkladoch, často stačí pár úprav kódu – správne nastavené atribúty, premyslená navigácia či vhodná správa stavu prvkov – a aplikácia sa stáva oveľa zrozumiteľnejšou pre tých, ktorí sa spoliehajú na asistívne technológie. 🛠️📱
Pri vývoji je dôležité myslieť na:
✔️ Logickú navigáciu – prvky musia byť čítané v zmysluplnom poradí
✔️ Správne označenie komponentov – čítačka obrazovky potrebuje jasné popisy
✔️ Interaktívne prvky – tlačidlá, tabuľky a formuláre musia mať zrozumiteľnú funkcionalitu
✔️ Skupinovanie prvkov – relevantné informácie by mali byť prepojené, aby dávali zmysel aj bez vizuálneho kontextu
Prístupnosť nie je len „nice-to-have“ – v mnohých prípadoch je legislatívnou požiadavkou a v neposlednom rade aj kvalitným softvérovým inžinierstvom. Dobre napísaný kód znamená lepšiu škálovateľnosť, udržateľnosť a lepšiu použiteľnosť pre všetkých.
Takže keď budete nabudúce implementovať novú funkcionalitu, opýtajte sa sami seba:
➡️ „Bude to fungovať aj pre niekoho, kto nevidí obrazovku?“
➡️ „Vie používateľ pochopiť funkcionalitu len pomocou čítačky obrazovky?“
➡️ „Navigácia a interakcie dávajú logiku aj bez vizuálneho usporiadania?“
Ak nie, možno je čas pridať pár accessibility fixov. Malé zmeny v kóde neraz znamenajú obrovský rozdiel v používateľskej skúsenosti. 🔥
💡 Zdrojový kód nájdete na GitHub.