2016-09-01 73 views
0

以模態方式呈現視圖控制器後,將調用最初的首選視圖。然而,在我們解僱了viewcontroller並且它已經被dealloc之後。在再次呈現viewcontroller後,不會調用preferredfocusedview。運行在tvOS 9.2上。並不總是調用tvOS preferredfocusedview

即使添加了以下沒有幫助:

-(void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self setNeedsFocusUpdate]; 
    [self updateFocusIfNeeded]; 
} 

任何人都知道這是怎麼回事?或者如果有反正調試呢?

編輯: 我加入視圖 - 控制方式:在tvOS 9

viewController = [[UIViewController alloc] init]; 
[viewController addChildViewController:self]; 
[viewController.view addSubview:self.view]; 
[self didMoveToParentViewController:viewController]; 
+0

您還可以在創建視圖控制器的地方提供代碼嗎? –

回答

0

實現自定義焦點行爲是災難。蘋果已經提到,在WWDC中呈現/解散視圖控制器時,重定向焦點存在限制。

tvOS10將使用preferredFocusEnvironment更好地處理munch。 https://developer.apple.com/videos/play/wwdc2016/215/

當我需要在tvOS 9中的viewDidAppear中解決這個重點重定向問題時,我遇到了完全相同的問題。有時它起作用,有時不起作用。不知道如此如此。但是,當我在viewDidAppear的setNeedsFocusUpdate/updateFocusIfNeeded上放置第二個延遲時,它在一致性方面更好。 preferredFocusedView始終被調用。

-(void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [self setNeedsFocusUpdate]; 
     [self updateFocusIfNeeded]; 
    }); 
} 

如果您正在手動更改焦點,請在呈現和呈現視圖控制器中執行此操作。這一切都來自我的觀察,我不認爲有一個適當的方式來實現一些重點行爲,因爲tvOS API是一種新穎和過早。對不起,沒有能夠給你很好的解釋,爲什麼這可能工作。祝你好運。

+0

其實,我發現如果你想讓焦點引擎把焦點放在頂部視圖的頂部。我不得不打電話:[rootView setNeedsFocusUpdate];和[rootView updateFocusIfNeeded]; – Frank

相關問題