2015-09-19 8 views
5

アップルのguidelinesによれば、tvOSのメニューボタンを押すと、トップメニューに戻るまで元のメニューに戻ります。その時点でOSメニューに戻ります。私の質問は、どのように私は、メニューボタンのデフォルトの動作を防止し、OSのメニューに戻って停止しますが、その後、ユーザーが私のアプリのトップメニューにあるときに再アクティブ化するのですか?Apple Siriのリモートメニューボタンを無効にするデフォルトの動作

答えて

16

あなたがallowedPressTypes = UIPressTypeMenuコードので、同じようtapGestureRecognizer登録して設定することができます。

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

を次にシリは、メニューボタンがあなたのhandleTapメソッドが呼び出されます押されてリモコンたび、あなたはあなたが必要な任意のカスタムロジックを追加することができます。アプリケーションをルートビューコントローラに一時停止しないようにメニューボタンをブロックすることは、App Storeの拒否の原因になることに注意してください。

ジェスチャーの検出に関する詳細については、hereとpressTypes hereを参照してください。

+0

は、ビューの認識ジェスチャーに追加の単純な行為は、そのデフォルトの動作を実行することからそれを停止していますか? – mredig

+1

はい、私が私の中で使っているのは、MenuButtonが押されると、あなたが提供しているセレクタを呼び出すことになります。 –

+0

AVPLayerViewControllerではtapgestureを追加しましたが、メニューボタンのジェスチャーは追加しませんtvosを呼び出す。 – vipulk617

2

この現象は、UINavigationControllerを使用して無料で入手できるものです。

もっと一般的には、コンテナビューコントローラは、メニューボタンのタップジェスチャ認識器がネストのルートレベルにあるかどうかに基づいて、開始から許可または禁止するために-gestureRecognizerShouldBegin:デリゲートメソッドを使用できます。共有UIApplicationインスタンスが処理されていないメニューボタンを押すと、システムに通知され、アプリがバックグラウンドに送信されます。

6

私のために働いた@ C_Xの回答のスウィフト版。

let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:") 
tapGesture.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)] 
self.view.addGestureRecognizer(tapGesture) 

スウィフト3バージョン:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyClass.handleMenuPress(_:))) 
tapGesture.allowedPressTypes = [NSNumber(value: UIPressType.menu.rawValue)] 
self.view.addGestureRecognizer(tapGesture) 
+0

私はApple Tvアプリケーションで作業しています。このアプリは、プレイビデオに基づいています。私の要件は、ユーザーがビデオを一時停止してメニューボタンを押すと、ビデオが連続して再生されることです。私はビデオポーズ状態で、ユーザーがメニューボタンを押した後、ビデオを再生せずに画面を前の画面にリダイレクトしたい。 –

+0

_handleTap_関数では、スタックから現在のVCをポップできるはずです。 – Individual11

+0

ニース、簡潔な解決策。 Swift 3の構文が追加されました。 –

関連する問題