2014-03-01 29 views
4

我目前在設置VoiceOver的一個特定標籤的焦點時遇到了麻煩。根據蘋果的開發者網站(https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/Accessibility/AccessibilityfromtheViewControllersPerspective.html),第一個對象的焦點可以通過添加以下代碼片段更改:iOS VoiceOver第一項

@implementation MyViewController 
- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, 
           self.myFirstElement); 
} 
@end 

不幸的是,我無法得到這個在iOS7正常工作。

編輯 - 爲了澄清,我的意思是工作不正常,它默認爲導航欄中最左上角的按鈕。我可以驗證我正在努力關注的標籤不是零,並且是另一個視圖的子視圖,我已經取代了導航欄標題。

+0

您是否已驗證'self.myFirstElement'不是'nil'? – rmaddy

+0

「不正常工作」是什麼意思? myFirstElement是否爲有效的UIAccessibilityElement? – user1459524

+0

請參閱上面的編輯問題。 – user1927638

回答

3

你的代碼確實是正確的。我發現它有時不會關注您指定的元素,因爲與默認焦點行爲有一些衝突。爲了解決這個問題,並確保你指定的元素集中,只需延遲該呼叫。這有點脆弱,但這是我找到的唯一解決方案。你可能想要玩延遲量 - 下面是0.75秒的延遲。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.75 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, self.myFirstElement); 
}); 
+0

我不知道爲什麼,但你的答案確實奏效。 – BollMose