2013-05-01 32 views
8

Khi có thể chỉnh sửa UITableView, UITableViewCells cho phép người dùng thực hiện các tác vụ tùy chỉnh khi bật VoiceOver. Người dùng có thể nghe thấy các hành động có sẵn bằng cách vuốt lên hoặc xuống trong khi con trỏ VoiceOver ở trên ô và sau đó gọi các hành động bằng cách nhấn đúp vào bất kỳ đâu trên màn hình. Chỉ có hai hành động có sẵn trong các ô của tôi: Xóa (yêu cầu xóa ô thông thường) và Mặc định (gọi một lần nhấn vào ô). Câu hỏi của tôi là hai lần:Tác vụ VoiceOver tùy chỉnh trong UITableViewCell

Có cách nào để thêm hành động VoiceOver tùy chỉnh vào một ô không?

Theo mặc định, hành động Xóa được đọc là "Xóa" ngay cả khi đại biểu xem bảng trả về tiêu đề tùy chỉnh theo phương pháp tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:. Làm thế nào tôi có thể làm cho VoiceOver đọc ra một tiêu đề hành động tùy chỉnh?

+0

https://stackoverflow.com/a/45643931/4995771 – Masih

+0

@Mihih vẫn chưa khắc phục được sự cố. giải pháp này thực sự giúp: https://stackoverflow.com/a/48689384/4723935 – Pavlos

Trả lời

10

Chỉ đơn giản là không có API để cung cấp các hành động phần tử tùy chỉnh cho VoiceOver. No UIAccessibility* giao thức cung cấp bất cứ điều gì cho điều này là có thể. Tôi đoán bạn nên tập một radar nếu bạn cần phải thêm hành động tùy chỉnh và hy vọng Apple sẽ thực hiện nó trong một số phiên bản tương lai của iOS (hoặc nó sẽ xuất hiện trong iOS 7 trong một tháng).

CẬP NHẬT: Tính đến iOS 8, bạn có thể thiết lập/thực hiện accessibilityCustomActions tài sản để trả lại một mảng của UIAccessibilityCustomAction đối tượng của bạn (lưu ý rằng VoiceOver vẫn sẽ thêm "Kích hoạt Item" hành động mặc định trong giao diện của nó ngoài những gì bạn cung cấp):.

self.accessibilityCustomActions = [ 
    UIAccessibilityCustomAction(name: NSLocalizedString("Close", comment: ""), target: self, selector: "didPressClose") 
] 
... 
@objc 
func didPressClose() -> Bool { 
    ... 
} 

Như thường lệ với Swift và selectors, đừng quên để thêm thuộc tính @objc với phương pháp mục tiêu của hành động tùy chỉnh trong Swift nếu bạn không phân lớp NSObject/phương pháp này là riêng tư, nếu không cố gắng kích hoạt hành động bằng VoiceOver, nó sẽ không làm bất cứ điều gì và chơi âm thanh "kết thúc giới hạn đạt được" (ít nhất là trên iOS 8.2 và 8.3, nơi tôi đã thử nghiệm với đối tượng mục tiêu đã làm lớp con NSObject).

Về câu hỏi thứ hai của bạn - cảm giác như một lỗi mà bạn lại có thể nộp một radar cho :-)

+0

Có cách nào để tùy chỉnh từ ngữ của hành động mặc định không? "kích hoạt mục" không thực sự hữu ích. – wangii

+1

Không, vì không có API cho điều này (bạn cũng không thể tùy chỉnh gợi ý mặc định về tính khả dụng của các hành động tùy chỉnh, tức là "Vuốt lên hoặc xuống ..."). –

+0

Chỉ là một suy nghĩ nhưng bạn đã thử xóa các đặc điểm? Ví dụ: hãy thử xóa đặc điểm 'Nút' và xem điều đó có hữu ích không. (Tôi đang rời khỏi máy tính của mình ngay bây giờ hoặc tôi tự mình kiểm tra.) – MarqueIV

3

iOS 8 thêm hỗ trợ cho hành động tùy chỉnh ứng dụng xác định. Từ UIAccessibility.h:

/* 
Return an array of UIAccessibilityCustomAction objects to make custom actions for an element accessible to an assistive technology. 
For example, a photo app might have a view that deletes its corresponding photo in response to a flick gesture. 
If the view returns a delete action from this property, VoiceOver and Switch Control users will be able to delete photos without performing the flick gesture. 
default == nil 
*/ 
@property (nonatomic, retain) NSArray *accessibilityCustomActions NS_AVAILABLE_IOS(8_0); 
+0

vì vậy nếu tôi thêm này vào tập tin tiêu đề tôi sẽ có các hành động trợ năng với Voice Over? – Pavlos

Các vấn đề liên quan