2016-02-04 53 views
3

在我的tvOS應用程序的主屏幕上,我使用UITapGestureRecognizer來監視正在按下的菜單按鈕。根據屏幕上的內容,我需要以不同的方式處理它,但顯然,在某些情況下,我想將該菜單解釋爲「退出到主屏幕」。我無法找到一個乾淨利落的API。 exit(0)與我所能找到的距離很近,感覺就像是一場崩潰 - 應用程序突然消失,沒有過渡效果。有我可以使用的API嗎?謝謝!tvOS - 如何以編程方式返回主屏幕

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(consumeTap:)]; 
    tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)]; 
    [self.navigationController.view addGestureRecognizer:tapGestureRec]; 
} 

- (void)handleTap:(id)_ 
{ 
    if (ShouldExitNow()) exit(0); 
} 

回答

2

事實證明,我可以通過編程方式從視圖中刪除的UITapGestureRecognizer每當我想MENU回家,並重新添加它,當我想再次抓住它做到這一點。超笨拙,但它現在效果很好。

1

,你可以設置一個Bool並檢查它在你的handleTap函數返回到主屏幕:

if returnToHomeScreen { 
    UIControl().sendAction(#selector(NSURLSessionTask.suspend), to: UIApplication.sharedApplication(), forEvent: nil) 
} 
+0

NSURLSessionTask.suspend?該API並不意味着根本無法進入主屏幕......它可能是偶然的工作,但我很確定它不是功能。 – StilesCrisis

+0

@StilesCrisis我同意,但似乎沒有任何* clean *的方式來實現這一點。至少比使用'exit(0)'更好。 –

+0

那麼,我發現併發布了一個完美的解決方案,無需依賴未公開的API。你必須玩弄添加/刪除處理程序,但它都在記錄的API中。像這樣的技巧很容易讓你的應用程序被拉。 – StilesCrisis