Nghiên cứu khả năng tiếp cận - iOS

Mar 22 2022
Trọng tâm của các bài viết này là ghi lại các nghiên cứu khả năng tiếp cận của tôi đối với trình đọc màn hình (VoiceOver) trong SwiftUI và UIKit. Tôi định giải quyết các tính năng mới 😌 mà SwiftUI cung cấp cho chúng ta cũng như so sánh các thuộc tính và phương thức hiện có trong UIKit.
Ảnh của CardMapr trên Unsplash

Trọng tâm của các bài viết này là ghi lại các nghiên cứu khả năng tiếp cận của tôi đối với trình đọc màn hình (VoiceOver) trong SwiftUI và UIKit.
Tôi định giải quyết các tính năng mới 😌 mà SwiftUI cung cấp cho chúng ta cũng như so sánh các thuộc tính và phương thức hiện có trong UIKit.

Trong bài viết đầu tiên này, chúng ta sẽ bắt đầu bằng cách khám phá các cách chính mà chúng ta có thể tương tác với trình đọc màn hình (LT trong phần còn lại của bài viết này) khi lập trình một Ứng dụng iOS có thể truy cập từ UIKit.

Tại thời điểm viết bài này, các công nghệ sau đã được sử dụng:

  • Xcode 13.2
  • iOS 15
  • Swift 5

Để trình đọc màn hình xác định chế độ xem được đề cập là một phần tử cần được tập trung và đọc, thuộc tính này Boolphải có giá trị là true.

Khi giá trị của thuộc tính này là falsevà thuộc tính viewhiện tại chứa subviews, LT sẽ tìm kiếm một cách đệ quy những phần viewsbên trong có giá trị isAccessibleElementđể trueđọc.
Nếu bạn không có bất kỳ phần tử bên trong nào để đọc, LT sẽ chuyển sang phần tử tiếp theo, theo thứ tự đọc tiêu chuẩn: trên xuống dưới, từ trái sang phải.

AccessibilityLabel

Theo bản dịch miễn phí của tài liệu chính thức, tài sản này đại diện um rótulo sucinto em uma string localizada que identifica o elemento de acessibilidade. Nó có vẻ khó hiểu khi chúng ta không quen làm việc với khả năng truy cập nhưng sẽ sớm thấy sự khác biệt rõ ràng.
Thuộc tính này có thể là cài đặt quan trọng nhất cho một chế độ xem có thể truy cập được. Hãy lấy một ví dụ:

Hãy tưởng tượng trong một Ứng dụng, một nút có tiêu đề là “Thanh toán”. Đối với những người không sử dụng LT, chức năng của nó rất rõ ràng khi bạn bắt gặp nút này trên màn hình xác nhận thanh toán, chẳng hạn. Tuy nhiên, để một người sử dụng LT có thể xác định nút này và chức năng của nó trên màn hình, nó accessibilityLabelđược đặt ra, chứa một Stringnút đại diện cho cùng tiêu đề với nút.

Nếu chúng ta sử dụng các phần tử gốc của UIKit, chẳng hạn như UIButton, cấu hình này là không cần thiết, vì nó được tự động định cấu hình khi chúng ta sử dụng phương thức setTitle(_ title: String?, for state: UIControl.State).

Cấu hình này là cần thiết trong một số trường hợp:

  • Khi chúng ta có các khung nhìn phức tạp hơn phải đọc từ a subview. Ví dụ: chúng tôi có một viewcái chứa biểu tượng có thể định cấu hình, một labelvà một biểu tượng mũi tên phải (như các nút Cài đặt ứng dụng ⚙️). Trong trường hợp này, chúng tôi có thể định cấu hình accessibilityLabeltoàn bộ chế độ xem dưới dạng accessibilityLabelnhãn bên trong, chẳng hạn như "Chế độ trên máy bay" hoặc "Wi-Fi".
  • Phần tử không có đại diện bằng văn bản. Ví dụ: Một nút chỉ có biểu tượng. Trong trường hợp này, accessibilityLabelnên mô tả hành động được thực hiện bởi nút, ví dụ: "tiếp tục âm nhạc" trên nút phát trong ứng dụng trình phát nhạc.
  • Khi chúng ta có một cái viewmà phần đọc bao gồm thông tin từ nhiều hơn một cái, subviewnhưng cái viewbên ngoài nhất phải được đọc như một phần tử duy nhất. Trong trường hợp này, chúng ta có thể nối việc đọc các phần tử bên trong khác nhau thành một phần tử duy nhất Stringtrước khi định cấu hình nó làm accessibilityLabelkhung nhìn ngoài cùng. Ví dụ: Danh sách các email chưa đọc. Nếu mỗi mục trong danh sách được đọc như một phần tử duy nhất, chúng tôi phải nối các thông tin liên quan như tiêu đề email, người gửi, ngày và giờ và những thông tin khác. Nhắc nhở : Trong trường hợp này thuộc tính isAccessibleElementcủa mỗi mục trong danh sách phải được đặt là truevà thuộc tính của mỗi mục subviewphải được false.

Cho đến nay chúng ta đã biết về nội dung của các nút nhưng không phải cách LT xác định phần tử đó là nút. Trong trường hợp này, cấu hình nên được sử dụng là accessibilityTraits.

Đây accessibilityTraitslà một tập hợp các chỉ thị cho LT biết nó viewcó những đặc điểm gì. Phổ biến nhất là văn bản tĩnh, nút, tiêu đề, liên kết, hình ảnh và thành phần có thể điều chỉnh.
Đừng ngạc nhiên nếu LT không nói gì khác khi đọc văn bản tĩnh, đây là hành vi mặc định. Như đã nói trước đây, đây accessibilityTraitslà một tập hợp các đặc điểm và có thể được áp dụng nhiều hơn một đặc điểm cùng một lúc. Chúng tôi có thể làm điều đó với accessibilityTraits.update(with newMember: UIAccessibilityTraits). Tương tự như vậy, bạn chỉ có thể xóa một đặc tính được áp dụng với accessibilityTraits.remove(_ member: UIAccessibilityTraits).

Một accessibilityTraitstập hợp thú vị là những tập hợp được áp dụng cho các trạng thái như selected, và notEnabled. Trong trường hợp xây dựng chế độ xem tùy chỉnh, hãy nhớ đồng bộ hóa giá trị của các biến này accessibilityTraitsvới các biến isSelectedvà! isEnabledcủa UIControl.

AccessibilityValue

Thuộc tính này đại diện cho giá trị tức thời mà một số loại viewscó thể chứa. Ví dụ: Một thanh trượt chứa thuộc tính valuelà một giá trị chuẩn hóa đại diện cho mức mà thanh trượt đã được điều chỉnh.
Trong trường hợp sử dụng thanh trượt, bạn phải điều chỉnh thuộc tính accessibilityValueđể bao gồm mức mà thanh trượt đã được điều chỉnh cùng với đơn vị hoặc số lượng được đại diện. Trong trường hợp thanh trượt điều chỉnh mức độ sáng màn hình, mức này là từ 0 đến 100 và độ lớn là phần trăm, với giá trị đọc cho LT là "21 phần trăm".

khả năng tiếp cận

Tài sản này không được sử dụng nhiều như những tài sản khác do hai yếu tố:

  • Nói chung, sự hiểu biết có thể được thực hiện thông qua các thuộc tính trước đó.
  • Đây là cài đặt mà người dùng có thể tắt nếu muốn, trong Cài đặt -> Trợ năng -> VoiceOver -> Giọng nói -> Độ dài -> Mẹo nói.
    Do đó, thông tin cần thiết để sử dụng ứng dụng không nên được đưa vào thuộc tính này.

accessibilityIdentifier

Thuộc tính cuối cùng này, mặc dù có chứa tên, accessibilitykhông dành cho trình đọc màn hình sử dụng.
Nó chủ yếu được sử dụng bởi các bài kiểm tra giao diện người dùng tự động như Appium hoặc XCUITest để định vị duy nhất phần tử trong màn hình.

Phần kết luận

5 thuộc tính / phương pháp mà chúng tôi đã áp dụng này đại diện cho phần lớn các tương tác cần thiết với trình đọc màn hình. Tôi dự định giải quyết các tương tác phức tạp hơn với UIKit và SwiftUI trong các bài viết trong tương lai.

© Copyright 2021 - 2023 | vngogo.com | All Rights Reserved