Accessibility Trait: جوہر، اقسام اور ڈویلپمنٹ میں یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-05-16 مطالعے کا وقت: 9 منٹ

Accessibility Trait ایک iOS عنصر کی خاصیت ہے جو VoiceOver کے لیے اس کے کردار اور رویے کا تعین کرتی ہے۔ ٹریٹ اسکرین ریڈر کو بتاتا ہے کہ عنصر کیسے پڑھا جانا چاہیے اور کون سے اشارے دستیاب ہیں: چاہے وہ بٹن ہو، ہیڈر ہو، لنک ہو یا سرچ فیلڈ۔ Apple UIAccessibilityTraits، 2024 کے مطابق، سسٹم 15+ مستقلات کو سپورٹ کرتا ہے جنہیں بٹ ماسک کے ذریعے یکجا کیا جا سکتا ہے۔ صحیح طریقے سے منتخب کردہ ٹریٹ VoiceOver صارفین کے لیے نیویگیشن کا 50% تک وقت بچاتا ہے۔

اہم نکات

  • Accessibility Trait — VoiceOver کے لیے iOS عنصر کا کردار؛ UIAccessibilityTraits مستقلات کے ذریعے سیٹ کیا جاتا ہے
  • ٹریٹس کو | آپریٹر کے ذریعے یکجا کیا جا سکتا ہے پیچیدہ کردار بنانے کے لیے (بٹن + منتخب)
  • ہر عنصر ایک ساتھ کئی ٹریٹس رکھ سکتا ہے، لیکن الجھن سے بچنے کے لیے 3-4 سے زیادہ نہیں
  • غلط ٹریٹ (مثلاً بٹن کے لیے StaticText) تعامل کے منظر نامے کو توڑ دیتا ہے: صارف نہیں جانتا کہ اشارہ دستیاب ہے یا نہیں
  • Android میں، متبادل AccessibilityNodeInfo میں role اور className کی خصوصیات ہیں

Accessibility Trait کیا ہے

Accessibility Trait ایک UIView عنصر پر سیٹ کردہ ایک جھنڈی ہے جو VoiceOver کو اس کا معنوی کردار بتاتی ہے۔ ٹریٹ Apple کی رسائی پذیری سہ رخی کے تین اجزاء میں سے ایک ہے: Label (نام)، Hint (تفصیل)، Trait (کردار)۔ iOS UIAccessibilityTraits بٹ ماسک (UInt64) استعمال کرتا ہے، جہاں ہر بٹ ایک مخصوص کردار سے مطابقت رکھتا ہے۔ VoiceOver Label اور Hint کے بعد کردار پڑھتا ہے: «بھیجیں بٹن۔ ایک فارم کھلے گا» — UIAccessibilityTraitButton ٹریٹ کی بدولت «بٹن» شامل کیا گیا ہے۔

بطور ڈیفالٹ، UIButton UIAccessibilityTraitButton حاصل کرتا ہے، UILabel UIAccessibilityTraitStaticText حاصل کرتا ہے، UIImageView UIAccessibilityTraitImage حاصل کرتا ہے۔ حسب ضرورت کنٹرول استعمال کرتے وقت، ڈویلپر کو دستی طور پر ٹریٹ سیٹ کرنا ہوتا ہے۔ Apple Human Interface Guidelines، 2024، اسے «رسائی پذیری کو یقینی بنانے کے سب سے اہم اقدامات میں سے ایک» کہتے ہیں۔

صحیح ٹریٹ کے بغیر، صارف نہیں جانتا کہ کون سا اشارہ استعمال کرنا ہے: واحد ٹیپ (بٹن فعال کرنا)، ڈبل ٹیپ (زوم) یا سوائپ اشارہ (ٹوگل)۔ ٹریٹ یہ طے کرتا ہے کہ عنصر پر VoiceOver کے کون سے اشارے فعال ہوتے ہیں۔

UIAccessibilityTraits کا تکنیکی نفاذ

UIAccessibilityTraits ایک typealias UInt64 ہے۔ ہر ٹریٹ ایک مستقل ہے جس میں بالکل ایک بٹ سیٹ ہوتا ہے۔ مثال کے طور پر، UIAccessibilityTraitButton = 0x0000000000000001، UIAccessibilityTraitLink = 0x0000000000000002، UIAccessibilityTraitHeader = 0x0000000000000008۔ یکجائی بٹ وار OR سے حاصل ہوتی ہے: 0x0001 | 0x0008 = 0x0009۔ VoiceOver ماسک کا تجزیہ کرتا ہے اور رویے کا تعین کرتا ہے۔

iOS ٹریٹس کی اہم اقسام

iOS 15 سے زیادہ ٹریٹ مستقلات فراہم کرتا ہے۔ آئیے 90% منظرناموں میں استعمال ہونے والی اہم اقسام پر نظر ڈالتے ہیں:

ٹریٹمستقلVoiceOver رویہ
ButtonUIAccessibilityTraitButtonڈبل ٹیپ سے فعال کرنا
HeaderUIAccessibilityTraitHeaderہیڈر کے ذریعے تیز نیویگیشن
LinkUIAccessibilityTraitLinkلنک کے طور پر فعال کرنا
StaticTextUIAccessibilityTraitStaticTextصرف پڑھنا، کوئی فعال کرنا نہیں
SearchFieldUIAccessibilityTraitSearchFieldخاص رویے والا سرچ فیلڈ
ImageUIAccessibilityTraitImageتصویر، کوئی فعال کرنے کا اشارہ نہیں
SelectedUIAccessibilityTraitSelected«منتخب» حالت
PlaysSoundUIAccessibilityTraitPlaysSoundفعال ہونے پر آواز چلاتا ہے
KeyboardKeyUIAccessibilityTraitKeyboardKeyکی بورڈ کی
TabBarUIAccessibilityTraitTabBarٹیب بار عنصر

مستقلات iOS 3.0 سے UIKit میں دستیاب ہیں۔ iOS 14+ نے .accessibilityAddTraits() موڈیفائر کے ذریعے SwiftUI میں UIAccessibilityTraits سپورٹ شامل کیا۔

نایاب لیکن مفید ٹریٹس

UIAccessibilityTraitAdjustable — ایڈجسٹ قابل اقدار کے لیے (سلائیڈرز، پکرز، والیوم سلائیڈرز)۔ VoiceOver accessibilityIncrement اور accessibilityDecrement کے ذریعے بیان کردہ مرحلے کے ساتھ قدر تبدیل کرنے کے لیے اوپر/نیچے سوائپ کرنے کی اجازت دیتا ہے۔ UIAccessibilityTraitUpdatesFrequently — بار بار تبدیل ہونے والی اقدار والے عناصر کے لیے (ٹائمر، پیش رفت اشارہ)۔ VoiceOver ہر تبدیلی پر قدر نہیں پڑھتا بلکہ توقف کرتا ہے۔ UIAccessibilityTraitAllowsDirectInteraction — ان عناصر کے لیے جن کے ساتھ صارف براہ راست تعامل کر سکتا ہے (کی بورڈ، ڈرائنگ)، VoiceOver اشاروں کو نظرانداز کرتے ہوئے۔

ٹریٹس کا یکجا کرنا

ایک عنصر میں ایک ساتھ کئی ٹریٹس ہو سکتے ہیں — یکجائی بٹ وار OR (|) کے ذریعے سیٹ کی جاتی ہے۔ مثال: ایک بٹن جو فی الحال منتخب ہے — Button | Selected۔ VoiceOver اعلان کرے گا: «منتخب۔ قیمت کے مطابق فلٹر کیا گیا۔ بٹن۔»

کوڈ میں ٹریٹس سیٹ کرنا:

swift
filterButton.accessibilityTraits.insert(.button)
filterButton.accessibilityTraits.insert(.selected)

// یا ماسک کے ذریعے:
filterButton.accessibilityTraits = [.button, .selected]

حسب ضرورت UIView کے لیے جہاں ٹریٹ ڈیفالٹ طور پر سیٹ نہیں ہے:

swift
class CustomToggle: UIControl {
    override var accessibilityTraits: UIAccessibilityTraits {
        get {
            if isOn {
                return [.button, .selected]
            } else {
                return .button
            }
        }
        set {}
    }
}

یکجائی کا قاعدہ: فی عنصر 3-4 ٹریٹس سے زیادہ نہیں۔ ضرورت سے زیادہ ٹریٹس (مثلاً Button + Link + Header) VoiceOver اعلان کو بہت لمبا اور مبہم بنا دیتے ہیں۔ Apple کے مطابق، «ہر اضافی خاصیت صارف پر علمی بوجھ بڑھاتی ہے»۔

SwiftUI: ٹریٹ موڈیفائرز

SwiftUI میں، ٹریٹس .accessibilityAddTraits() اور .accessibilityRemoveTraits() موڈیفائرز کے ذریعے سیٹ کیے جاتے ہیں۔ مثال: Text(«عنوان»).font(.largeTitle).accessibilityAddTraits(.isHeader)۔ .isHeader موڈیفائر UIAccessibilityTraitHeader شامل کرتا ہے۔ SwiftUI ٹریٹ کی فہرست: .isButton، .isHeader، .isLink، .isSelected، .isImage، .isSearchField، .isKeyboardKey، .isStaticText، .isSummaryElement، .isToggle، .playsSound، .startsMediaSession، .updatesFrequently، .allowsDirectInteraction، .causesPageTurn، .isModal، .tabBar۔

ٹریٹ منتخب کرنے میں عام غلطیاں

بٹن کی بجائے StaticText — ایک حسب ضرورت کنٹرول جو دیکھنے میں بٹن جیسا لگتا ہے ڈیفالٹ طور پر StaticText ٹریٹ حاصل کرتا ہے۔ VoiceOver کوئی فعال کرنے کا اشارہ فراہم نہیں کرتا، لہٰذا صارف عنصر کو «دبا» نہیں سکتا۔ حل: واضح طور پر .button سیٹ کریں۔

ٹریٹ کے بغیر تصویر — رسائی پذیری فعال UIImageView کو Image ٹریٹ ملتا ہے، چاہے وہ حقیقت میں فوٹو بڑا کرنے کا بٹن ہی کیوں نہ ہو۔ .button اور Label «فوٹو بڑا کریں» تفویض کریں۔ WWDC 2023، «Deliver an Exceptional Accessibility Experience» کے مطابق، نئی ایپ ورژنز میں 40% رسائی پذیری رجعت ٹریٹ کی بے مطابقت کی وجہ سے ہوتی ہے۔

ہر عنصر پر Header — Header ٹریٹ اسکرین کے ساختی ہیڈرز کے لیے ہے۔ اگر ہر UILabel کو ہیڈر بنا دیا جائے، VoiceOver روٹر «ہیڈرز» موڈ میں بیکار ہو جاتا ہے — یہ ہر لفظ پر رکے گا۔

کیسے ٹھیک کریں: چیک لسٹ

  • ہر انٹرایکٹو حسب ضرورت عنصر Button، Link یا Adjustable ٹریٹ حاصل کرتا ہے
  • سیکشن ہیڈرز Header ٹریٹ حاصل کرتے ہیں (StaticText نہیں)
  • تصویر والے بٹن منتخب حالت میں Button + Selected ٹریٹ حاصل کرتے ہیں
  • اشارے کے بغیر عناصر — StaticText یا Image (صرف پڑھنا)

UIButton کو UIControl سے بدلنے پر رجعت کی خرابیاں

ٹریٹ کھونے کی ایک عام وجہ ری فیکٹرنگ ہے: ڈویلپر حسب ضرورت ڈسپلے کے لیے UIButton کو UIControl سے بدل دیتا ہے۔ UIButton خودکار طور پر Button ٹریٹ حاصل کرتا ہے، UIControl نہیں کرتا۔ ری فیکٹرنگ کے بعد، آپ کو واضح طور پر accessibilityTraits = .button سیٹ کرنا ہوگا۔ کوڈ ریویو میں ایک چیک شامل کریں: «اگر آپ نے UIButton کو UIControl سے بدلا ہے — ٹریٹ چیک کریں۔»

ٹریٹس اور متحرک حالتیں

بدلتی ہوئی حالت والے عناصر کے لیے (مثلاً لائک بٹن)، ٹریٹ کو متحرک طور پر بدلنا چاہیے۔ «پسند نہیں کیا» حالت میں — Button، «پسند کیا» حالت میں — Button + Selected + Image (اگر آئیکن ہے)۔ VoiceOver اعلان بدلتا ہے: «پسند کریں۔ بٹن۔» بمقابلہ «منتخب۔ پسند کریں۔ بٹن۔» اگر Selected ٹریٹ ناکافی ہے تو حالت بتانے کے لیے accessibilityValue استعمال کریں۔ سبسکرائب بٹن، پسندیدہ، فلٹرز اور ٹوگلز کے لیے موزوں۔

Android متبادل: role اور className

Android میں، ٹریٹس کا کوئی براہ راست متبادل نہیں ہے۔ بٹ ماسک کی بجائے، مندرجہ ذیل استعمال ہوتے ہیں:

  • className — AccessibilityNodeInfo.className کی قدر (android.widget.Button، android.widget.TextView)
  • role — ایک XML وصف (کردار View کی قسم سے طے ہوتا ہے)
  • stateDescription — Selected کا متبادل: حالت کی تفصیل شامل کرنا (فعال/غیر فعال)

Android میں حسب ضرورت View کے لیے، آپ کو onInitializeAccessibilityNodeInfo اوور رائڈ کرنا ہوگا:

kotlin
class CustomButton @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null
) : View(context, attrs) {

    override fun onInitializeAccessibilityNodeInfo(
        info: AccessibilityNodeInfo
    ) {
        super.onInitializeAccessibilityNodeInfo(info)
        info.className = "android.widget.Button"
        info.isClickable = true
    }
}

Flutter ڈویلپرز کو Semantics ویجٹ میں semanticsRole پیرامیٹر استعمال کرنا چاہیے: button، header، image، link، textField اور دیگر۔ مزید برآں، semanticsLabel اور semanticsHint دستیاب ہیں — iOS سہ رخی Label + Hint + Trait کا مکمل متبادل۔

ویب متبادل: WAI-ARIA role

موبائل ایپس (PWA، WebView) کے ویب ورژنز کے لیے، WAI-ARIA سے role وصف استعمال ہوتا ہے: role="button"، role="heading"، role="link"۔ یہ accessibilityTraits کا براہ راست متبادل ہے۔ ہائبرڈ ایپس میں، تصدیق کریں کہ WebView ARIA کرداروں کو مقامی رسائی پذیری پرت تک پہنچاتا ہے۔ اس کے لیے، iOS میں UIAccessibilityContainerDataTable پروٹوکول یا Android میں setAccessibilityDelegate استعمال کریں۔ JavaScript فعال WebView ARIA کرداروں کو صحیح طور پر نہیں پہنچا سکتا — الگ سے جانچ کریں۔

AccessibilityNodeInfo: اضافی اعمال

Android میں، آپ AccessibilityNodeInfo میں حسب ضرورت اعمال شامل کر سکتے ہیں: AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK اور ACTION_LONG_CLICK۔ یہ اضافی اشاروں کے ساتھ Button ٹریٹ کے برابر ہے۔ سلائیڈرز کے لیے، ACTION_SET_PROGRESS استعمال کریں — Adjustable کا متبادل۔ Spinner اور DatePicker کے لیے — ACTION_SET_SELECTION، ACTION_SET_DATE اور ACTION_SET_TIME۔

ٹریٹس کی جانچ اور آزمائش

Xcode Accessibility Inspector iOS کے لیے بنیادی ٹول ہے: ایک عنصر منتخب کریں اور Traits فیلڈ دیکھیں۔ یہ سیٹ کردہ ٹریٹس کی فہرست دکھائے گا۔ «عناصر» موڈ والا VoiceOver روٹر اسکرین کے تمام کنٹرولز پر نیویگیٹ کرنے کی اجازت دیتا ہے۔

ٹریٹ جانچنے کے لیے خودکار Swift ٹیسٹ:

swift
func testSubmitButtonTrait() {
    let app = XCUIApplication()
    app.launch()
    let submitButton = app.buttons["بھیجیں"]
    XCTAssertTrue(submitButton.isEnabled)
    // XCUIElement ٹریٹس تک براہ راست رسائی فراہم نہیں کرتا
    // اشارے کی فعال کرنے کے ذریعے جانچ
    submitButton.tap()
    XCTAssertTrue(app.staticTexts["فارم بھیج دیا گیا"].exists)
}

VoiceOver کے ذریعے دستی جانچ: VoiceOver آن کریں، عنصر پر سوائپ کریں، ڈبل ٹیپ کریں — اگر یہ Button ہے تو عنصر فعال ہونا چاہیے۔ اگر عنصر ڈبل ٹیپ پر جواب نہیں دیتا، ٹریٹ غلط ہے۔ Rotor اشارہ استعمال کریں موڈز کے درمیان سوئچ کرنے کے لیے («ہیڈرز»، «لنکس»، «بٹن») — ہر موڈ صرف متعلقہ ٹریٹ والے عناصر دکھائے گا۔

iOS میں ٹریٹس کی یونٹ ٹیسٹنگ

iOS 14 سے پہلے، یونٹ ٹیسٹس کی accessibilityTraits تک براہ راست رسائی نہیں تھی۔ iOS 14 سے شروع ہو کر، خاصیت دستیاب ہے: XCTAssertEqual(customButton.accessibilityTraits, .button)۔ حسب ضرورت کنٹرولز کی تصدیق کے لیے یونٹ ٹیسٹس میں اسے استعمال کریں۔ ہر نئے حسب ضرورت UIView کے درست ٹریٹ کی جانچ کرنے کی سفارش کی جاتی ہے، خاص طور پر ری فیکٹرنگ یا پیرنٹ کلاس تبدیل کرنے کے بعد۔

اکثر پوچھے گئے سوالات

ایک عنصر کو کتنے ٹریٹس دیے جا سکتے ہیں؟

فی عنصر 3-4 ٹریٹس تک۔ زیادہ تعداد VoiceOver اعلان کو غیر ضروری بناتی ہے۔ مجموعے استعمال کریں: Button + Selected، Header + StaticText۔

UIButton کا ڈیفالٹ ٹریٹ کیا ہے؟

UIAccessibilityTraitButton۔ iOS اسے تمام UIButton مثالوں کے لیے خودکار طور پر سیٹ کرتا ہے۔ اگر آپ UIView سے وراثت پاتے ہیں اور بٹن نقل کرتے ہیں، ٹریٹ دستی طور پر سیٹ کیا جانا چاہیے۔

کیا «Adjustable» ٹریٹ موجود ہے اور یہ کس لیے ہے؟

ہاں، UIAccessibilityTraitAdjustable — ایڈجسٹ قابل اقدار والے عناصر کے لیے (سلائیڈرز، پکرز، کاؤنٹرز)۔ VoiceOver قدر تبدیل کرنے اور موجودہ حالت پڑھنے کے لیے اوپر/نیچے سوائپ کرنے کی اجازت دیتا ہے۔

SwiftUI میں ٹریٹس کی جانچ کیسے کریں؟

.accessibilityAddTraits() موڈیفائر استعمال کریں: Text(«عنوان»).font(.title).accessibilityAddTraits(.isHeader)۔ طریقہ iOS 14+ پر کام کرتا ہے۔

اگر میں حسب ضرورت کنٹرول کے لیے ٹریٹ سیٹ نہ کروں تو کیا ہوگا؟

VoiceOver None ٹریٹ تفویض کرے گا۔ عنصر کو کوئی کردار نہیں ملے گا — اسکرین ریڈر قسم بتائے بغیر صرف Label پڑھے گا۔ صارف کو معلوم نہیں ہوگا کہ فعال کرنے کا اشارہ دستیاب ہے یا نہیں۔

خلاصہ

  • Accessibility Trait — ایک بٹ ماسک UIAccessibilityTraits جو VoiceOver کے لیے iOS عنصر کا کردار طے کرتا ہے (Button, Header, Link, StaticText اور دیگر)
  • ٹریٹس بٹ وار OR ([] Swift میں) کے ذریعے یکجا کیے جاتے ہیں، فی عنصر 3-4 سے زیادہ نہیں
  • حسب ضرورت UIView کو واضح ٹریٹ ملنا چاہیے — ڈیفالٹ طور پر یہ None یا Image ہو سکتا ہے
  • Android میں، کردار AccessibilityNodeInfo میں className کے ذریعے، Flutter میں semanticsRole کے ذریعے سیٹ کیا جاتا ہے
  • غلط ٹریٹ (بٹن کے لیے StaticText) VoiceOver منظر نامے کو توڑ دیتا ہے: کوئی فعال کرنے کا اشارہ نہیں
  • Xcode میں Accessibility Inspector اور VoiceOver روٹر کے ذریعے ٹریٹس چیک کریں
  • SwiftUI میں، ٹریٹس کو اعلانیہ طور پر ترتیب دینے کے لیے .accessibilityAddTraits() استعمال کریں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں