任何人都可以清楚地解釋一下UIAccessibilityConvertFrameToScreenCoordinates期望它的第二個參數的UIView嗎?有時它的行爲與我所期望的一樣,將VoiceOver的焦點矩形繪製在適當的元素上,但其他時候使用此輔助函數看起來就像巫術一樣!您應該使用UIAccessibilityConvertFrameToScreenCoordinates的哪個視圖?
Apple的文檔似乎沒有解釋。它指出參數必須是包含CGRect的視圖,但在某些實現中,不清楚哪個視圖是CG的當前上下文。有沒有簡單的方法來解決這個問題?
作爲一個例子,我創建了一個自定義的UITableViewCell,它通過覆蓋單元格的UIAccessibilityContainer實現(見下文)具有自定義的VoiceOver焦點順序。無論我嘗試什麼,accessibilityFrame都會關閉。我試着發送一個對關聯的UITableView的引用,包含該接口的父UIView以及窗口本身。我覺得我已經瀏覽了整個視圖堆棧!
下面是不是自定義UITableViewCell類的完整代碼,但應該讓你知道我正在嘗試做什麼。
#pragma mark - Accessibility (UIAccessibilityContainer implementation)
- (id)accessibilityElementAtIndex:(NSInteger)index
{
return [self.accessibilityObjects objectAtIndex:index];
}
- (NSInteger)accessibilityElementCount
{
return self.accessibilityObjects.count;
}
- (NSInteger)indexOfAccessibilityElement:(id)element
{
return [self.accessibilityObjects indexOfObject:element];
}
- (void *)addAccessibilityElement:(UIView *)accessibleView{
if (self.accessibilityObjects == nil) {
self.accessibilityObjects = [NSMutableArray array];
}
UIAccessibilityElement *accessibilityElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
accessibilityElement.accessibilityLabel = accessibleView.accessibilityLabel;
//accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.contentView);
//accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.parentView); // parentView is a reference to the view controller's parent view
accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.tableView); // tableView is a reference to the cell's UITableView
[self.accessibilityObjects addObject:accessibilityElement];
}
我希望這對某人有意義。提前致謝。
謝謝,克里斯。我將再次使用這些信息進行處理。 – dotjay