VoiceOver: điều khiển bằng cử chỉ và tính năng trên iOS

Tác giả: IT Sectr Đã đăng: 2026-05-15 Thời gian đọc: 8 phút

VoiceOver là trình đọc màn hình tích hợp của Apple, đọc to từng phần tử giao diện và cho phép điều khiển thiết bị bằng cử chỉ. Công nghệ này được tích hợp vào iOS, iPadOS và macOS ở cấp hệ thống và không yêu cầu cài đặt thêm phần mềm. Theo Apple Accessibility (2025), VoiceOver hỗ trợ hơn 40 ngôn ngữ và được hàng triệu người dùng khiếm thị và mù trên toàn thế giới sử dụng.

Những điểm chính

  • VoiceOver là trình đọc màn hình tích hợp trên iOS, iPadOS và macOS, điều khiển bằng cử chỉ và giọng nói
  • Rotor VoiceOver chuyển đổi chế độ điều hướng: từ, ký tự, tiêu đề, liên kết
  • Cử chỉ bao gồm chạm (đọc to), vuốt (di chuyển) và chạm đúp (kích hoạt)
  • Nhà phát triển cấu hình trợ năng thông qua UIAccessibility và Accessibility Label
  • VoiceOver tích hợp với văn bản động và màn hình chữ nổi Braille

VoiceOver là gì?

VoiceOver là trình đọc màn hình được tích hợp trong hệ điều hành Apple. Nó được thiết kế cho người dùng khiếm thị và mù, cho phép tương tác đầy đủ với thiết bị mà không cần tiếp xúc thị giác. VoiceOver đọc to tất cả các phần tử giao diện: nút bấm, liên kết, văn bản, hình ảnh, thông báo và phần tử hệ thống.

Công nghệ này lần đầu tiên được giới thiệu vào năm 2005 cho macOS và xuất hiện trên iOS cùng với iPhone 3GS vào năm 2009. Kể từ đó, VoiceOver đã trở thành một phần không thể thiếu của hệ sinh thái Apple và là một trong những lý do chính ủng hộ khả năng tiếp cận của nền tảng. VoiceOver được tích hợp ở cấp hệ thống — nghĩa là nó hoạt động trong bất kỳ ứng dụng nào mà không cần tích hợp thêm từ nhà phát triển, mặc dù chất lượng đọc phụ thuộc trực tiếp vào mức độ ứng dụng sử dụng API trợ năng iOS.

VoiceOver hỗ trợ hơn 40 ngôn ngữ với tổng hợp giọng nói tự nhiên và thích ứng với cài đặt giọng nói khu vực. Trên iOS, VoiceOver sử dụng công cụ giọng nói Siri cho tiếng Việt và một số ngôn ngữ khác, đảm bảo âm thanh tự nhiên nhất và ngữ điệu chính xác tùy thuộc vào dấu câu và ngữ cảnh.

VoiceOver hoạt động như thế nào?

VoiceOver chặn các sự kiện chạm và diễn giải chúng khác với đầu vào iOS tiêu chuẩn. Khi người dùng chạm vào màn hình, VoiceOver không kích hoạt phần tử dưới ngón tay mà trước tiên đọc to nó. Chỉ sau khi chạm đúp, phần tử mới được kích hoạt. Sự khác biệt chính này cho phép người dùng khiếm thị khám phá giao diện mà không có nguy cơ nhấp nhầm.

Thứ tự đọc và điều hướng

VoiceOver đọc các phần tử giao diện theo thứ tự logic: từ trái sang phải, từ trên xuống dưới. Thứ tự đọc được kế thừa từ hệ thống phân cấp view iOS, nhưng nhà phát triển có thể thay đổi nó thông qua thuộc tính accessibilityElements cho các bố cục phức tạp. Người dùng có thể di chuyển giữa các phần tử bằng cách vuốt sang phải (tiếp theo) và sang trái (trước đó), cũng như chạm vào một phần tử cụ thể để được đọc to.

Mỗi lần di chuyển, VoiceOver đọc loại phần tử (nút, liên kết, tiêu đề), tên của nó (accessibilityLabel), trạng thái (đã chọn, vô hiệu hóa) và gợi ý (accessibilityHint). Nếu phần tử chứa một giá trị — ví dụ, thanh trượt âm lượng — VoiceOver cũng đọc to giá trị đó. Accessibility Traits (UIAccessibilityTraits) cung cấp thêm thông tin cho người dùng về hành vi của phần tử: nó là nút bấm, công tắc, trường tìm kiếm hay phím bàn phím.

Rotor VoiceOver

Rotor là một núm điều chỉnh ảo chuyển đổi chế độ điều hướng VoiceOver. Người dùng xoay rotor bằng hai ngón tay (giống như núm âm lượng) và chọn chế độ: từ, ký tự, tiêu đề, liên kết, điểm vào, hàng bảng và các chế độ khác. Chế độ tiêu đề cho phép chuyển đổi nhanh giữa H1-H6 trên trang web và trong ứng dụng, trong khi chế độ ký tự đọc văn bản từng chữ một, hữu ích khi điền biểu mẫu hoặc nhập mã xác nhận.

Nhà phát triển có thể thêm chế độ tùy chỉnh vào rotor thông qua API UIAccessibilityCustomRotor. Ví dụ, trong ứng dụng ghi chú, có thể thêm rotor “Ghi chú yêu thích” hoặc “Thay đổi gần đây”. Rotor tùy chỉnh tăng tốc đáng kể việc điều hướng trong các ứng dụng cụ thể và được coi là thực hành tốt nhất về trợ năng trên iOS.

Điều khiển cử chỉ VoiceOver

VoiceOver sử dụng bộ cử chỉ riêng không trùng với cử chỉ iOS tiêu chuẩn. Hầu hết các cử chỉ được thực hiện bằng ba ngón tay thay vì một — điều này ngăn xung đột với thao tác thông thường và cho phép VoiceOver hoạt động đồng thời với đầu vào tiêu chuẩn.

Hành độngCử chỉKết quả
Đọc to phần tửChạm 1 ngón tayĐọc tên phần tử
Kích hoạtChạm đúpNhấn nút hoặc liên kết
Phần tử tiếp theoVuốt sang phảiChuyển đến phần tử tiếp theo
Phần tử trước đóVuốt sang tráiQuay lại phần tử trước
CuộnVuốt 3 ngón tayCuộn danh sách hoặc trang
RotorXoay 2 ngón tayChuyển chế độ điều hướng

Cử chỉ chạm đúp là cách chính để kích hoạt các phần tử trong VoiceOver. Nếu một phần tử yêu cầu hành động đặc biệt (ví dụ: kéo), VoiceOver sử dụng chuỗi “chạm — chạm đúp và giữ” để vào chế độ di chuyển. Điều này cho phép thực hiện các cử chỉ phức tạp như kéo và thả mà không cần nhìn màn hình. VoiceOver cũng hỗ trợ cử chỉ “chạm đúp hai ngón tay” để hủy hành động và “chạm ba lần” để bật/tắt Màn hình che (Screen Curtain).

VoiceOver trong phát triển ứng dụng di động

Nhà phát triển ứng dụng iOS có thể cải thiện đáng kể tương tác với VoiceOver thông qua API UIAccessibility. Các cài đặt trợ năng cơ bản được thêm trong Interface Builder (Identity Inspector → Accessibility), nhưng các giao diện phức tạp yêu cầu cấu hình lập trình trong mã.

Nhãn trợ năng và Traits

Thuộc tính accessibilityLabel đặt văn bản mà VoiceOver đọc cho phần tử. Nếu không có nhãn nào được đặt, VoiceOver sử dụng văn bản nút hoặc văn bản giữ chỗ của trường văn bản. Đối với phần tử không có văn bản (biểu tượng, view tùy chỉnh), nhãn là bắt buộc. Thuộc tính accessibilityTraits xác định loại phần tử: nút bấm, tiêu đề, công tắc, trường tìm kiếm, phím bàn phím, giá trị thay đổi, liên kết và các loại khác.

swift
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Hồ sơ người dùng"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Mở màn hình cài đặt hồ sơ"

Cờ isAccessibilityElement bật hỗ trợ VoiceOver cho các view tùy chỉnh — mặc định nó chỉ đúng cho các phần tử tiêu chuẩn (UIButton, UILabel, UITextField). Tham số accessibilityHint thêm gợi ý: VoiceOver đọc gợi ý sau khi tạm dừng nếu người dùng dừng lại trên một phần tử. Gợi ý nên mô tả kết quả của hành động, không phải hướng dẫn: “Mở màn hình cài đặt” thay vì “Nhấn để mở”.

Nhóm và thứ tự phần tử

Đối với các màn hình phức tạp, nơi nhóm phần tử logic không khớp với thứ tự trực quan, accessibilityElements được sử dụng — một mảng xác định thứ tự đọc. Ví dụ, thẻ sản phẩm chứa hình ảnh, tên, giá và nút “Thêm vào giỏ hàng”. Nếu các phần tử này được sắp xếp hỗn loạn trong hệ thống phân cấp view, accessibilityElements thiết lập thứ tự chính xác cho VoiceOver.

swift
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()

productCard.accessibilityElements = [
    productImage, productName, productPrice, addToCartButton
]

Để kết hợp nhiều phần tử thành một phần tử có thể truy cập duy nhất, UIAccessibilityContainer hoặc accessibilityFrame được sử dụng để ghi đè vùng chạm. Điều này hữu ích khi một ô bảng chứa nhiều thành phần UI nhưng về mặt logic đại diện cho một phần tử — VoiceOver nên đọc toàn bộ ô cùng một lúc, không duyệt qua nội dung riêng lẻ.

Cấu hình trợ năng cho VoiceOver

Cấu hình trợ năng chính xác cho VoiceOver đòi hỏi sự chú ý đến một số khía cạnh: đánh dấu ngữ nghĩa, cập nhật động, xử lý phần tử tùy chỉnh và kiểm tra với trình đọc màn hình thực tế.

Đánh dấu ngữ nghĩa trong SwiftUI

Trong SwiftUI, trợ năng được cấu hình thông qua các bộ điều chỉnh .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() và .accessibilityAddTraits(). SwiftUI tự động kế thừa trợ năng từ các phần tử tiêu chuẩn, nhưng các thành phần tùy chỉnh yêu cầu cấu hình rõ ràng. Ví dụ, thanh trượt tùy chỉnh phải báo cho VoiceOver giá trị và định dạng thay đổi của nó.

swift
Slider(value: $volume, in: 0...100)
    .accessibilityLabel("Âm lượng")
    .accessibilityValue(
        Text("\(Int(volume)) phần trăm")
    )
    .accessibilityAddTraits(.adjustsAudioForAccessibility)
    .accessibilityAdjustableAction { direction in
        switch direction {
        case .increment: volume = min(volume + 5, 100)
        case .decrement: volume = max(volume - 5, 0)
        }
    }

Bộ điều chỉnh accessibilityAdjustableAction thêm khả năng thay đổi giá trị bằng cử chỉ VoiceOver: vuốt lên để tăng, vuốt xuống để giảm. Nếu không có bộ điều chỉnh này, thanh trượt sẽ không thể truy cập được để điều khiển bằng trình đọc màn hình. Cấu hình tương tự cũng cần thiết cho bộ tăng/giảm tùy chỉnh, bộ chọn và các phần tử khác thay đổi giá trị.

Cập nhật động và thông báo

Khi nội dung trên màn hình thay đổi động (thông báo xuất hiện, trạng thái tải được cập nhật, giá thay đổi), VoiceOver phải nhận được thông báo qua UIAccessibility.post. Nếu không có lệnh gọi này, trình đọc màn hình sẽ không biết về các thay đổi và người dùng sẽ bỏ lỡ thông tin quan trọng. Đối với SwiftUI, bộ điều chỉnh .accessibilityAnnouncement() được sử dụng.

swift
UIAccessibility.post(
    notification: .announcement,
    argument: "Giá đã giảm 20 phần trăm"
)

// SwiftUI
Text("Giá đã cập nhật")
    .accessibilityAnnouncement(Text("Giảm 20%"))

Thông báo VoiceOver nên được sử dụng một cách hợp lý: thông báo quá nhiều làm phiền người dùng, trong khi thiếu thông báo khiến ứng dụng không thể truy cập được. Chiến lược tối ưu là chỉ thông báo những thay đổi ảnh hưởng đến quy trình làm việc hiện tại của người dùng: cập nhật giỏ hàng, trạng thái tải, lỗi xác thực biểu mẫu, thông báo trò chuyện. Thay đổi nền (thời gian trên bảng điều khiển, tỷ giá hối đoái) không cần thông báo — người dùng sẽ tự kiểm tra khi cần.

Kiểm tra VoiceOver được thực hiện trên thiết bị thực tế với trình đọc màn hình đã bật hoặc trình giả lập iOS với tùy chọn Accessibility Inspector. Điều quan trọng là kiểm tra các kịch bản sử dụng đầy đủ: hoàn tất đăng ký, đặt hàng, tìm sản phẩm qua tìm kiếm mà không cần kiểm soát trực quan. Nếu luồng có thể điều hướng mà không cần phản hồi trực quan — VoiceOver đã được cấu hình chính xác.

Câu hỏi thường gặp

Cách bật VoiceOver trên iPhone?

Cài đặt → Trợ năng → VoiceOver. Bật công tắc. Để kích hoạt nhanh, nhấn ba lần nút bên cạnh (trên iPhone X trở lên) hoặc nút Home. Siri cũng có thể bật VoiceOver bằng lệnh “Bật VoiceOver”.

VoiceOver khác TalkBack như thế nào?

VoiceOver là trình đọc màn hình của Apple cho iOS, TalkBack là trình đọc màn hình của Google cho Android. Nguyên lý hoạt động giống nhau: chạm đọc, chạm đúp kích hoạt. Sự khác biệt nằm ở cử chỉ, cài đặt rotor và tích hợp hệ sinh thái: VoiceOver tích hợp sâu hơn với iCloud và Apple Pay.

Cách cấu hình VoiceOver cho ứng dụng của tôi?

Sử dụng API UIAccessibility: đặt accessibilityLabel cho tất cả phần tử, accessibilityTraits cho loại phần tử và accessibilityHint cho gợi ý. Trong SwiftUI, sử dụng bộ điều chỉnh .accessibilityLabel() và .accessibilityAddTraits(). Kiểm tra ứng dụng với VoiceOver đã bật.

Rotor trong VoiceOver là gì?

Rotor là chế độ điều hướng được chuyển đổi bằng cách xoay hai ngón tay. Nó xác định cách di chuyển giữa các phần tử: theo tiêu đề, ký tự, từ, liên kết hoặc điểm vào. Nhà phát triển có thể thêm chế độ riêng thông qua UIAccessibilityCustomRotor.

Tại sao VoiceOver không đọc phần tử tùy chỉnh của tôi?

Đối với UIView tùy chỉnh, cần đặt isAccessibilityElement = true và cung cấp accessibilityLabel. Nếu phần tử bao gồm nhiều view con, hãy sử dụng accessibilityElements để đặt thứ tự đọc hoặc kết hợp chúng vào một vùng chứa.

Tổng kết

  • VoiceOver là trình đọc màn hình tích hợp Apple cho iOS, iPadOS và macOS với điều khiển cử chỉ bằng giọng nói
  • Rotor chuyển đổi chế độ điều hướng: tiêu đề, ký tự, từ, liên kết và chế độ tùy chỉnh
  • Cử chỉ VoiceOver: chạm — đọc to, chạm đúp — kích hoạt, vuốt — điều hướng
  • Phát triển thông qua API UIAccessibility: label, traits, hint, rotor tùy chỉnh và thông báo động
  • SwiftUI cung cấp bộ điều chỉnh .accessibilityLabel(), .accessibilityAddTraits() và .accessibilityAdjustableAction()
  • Cập nhật động yêu cầu gọi UIAccessibility.post để thông báo cho VoiceOver
  • Kiểm tra bắt buộc trên thiết bị thực tế với VoiceOver đã bật mà không có kiểm soát trực quan

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm