2015-10-10 6 views
5

私はかなり基本的なものが欠けていると思いますが、ボタンを押しても適切に上書きすることはできません。tvos PressBeganをオーバーライドします

メニューボタンの押下を検出しようとしていますので、pressesBegan:を上書きし、UIPressTypeMenuをテストします。このメソッドは、メニューボタンの押下をキャッチして自分のコードを実行しますが、その後はすぐにアプリケーションの終了とともに実行されます。

これは私のオーバーライドされたメソッドです。誰かが私が間違っていることを知っていますか?自動メニュー終了を無効にする必要があるのですか? 2人のレスポンダーがいるのとほとんど同じです。左タップと右タップについても同じことが言えます。彼らは認識され、コードは起動しますが、イベントを完全には処理していないため、フォーカスが変更されます。

私は、アプリケーションの最初のビューコントローラでコードを試して、メニューが適切にオーバーライドされています。次に、空のビューを設定し、そのビューをビュー番号2として表示して、オーバーライドするメソッドを取得できません。あなたはpressesEnded:withEvent:メッセージはレスポンダチェーンのトップにバックアップを取得することができているので

- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 

      [(UIImageView *) [self.view viewWithTag:100] setUserInteractionEnabled:NO]; 

     } 
     if(press.type == UIPressTypePlayPause) { 
      // play and pause code 
     } 
    } 
} 


-(void) pressesEnded:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    // 
    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 
      // do ButtonA job 
      NSLog(@"test"); 
     } 
     if(press.type == UIPressTypePlayPause) { 
      // do ButtonX job 
     } else { 


     } 
    } 

} 

-(void) pressesChanged:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    // Works fine! 
    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 
      // do ButtonA job 
     } 
     if(press.type == UIPressTypePlayPause) { 
      // do ButtonX job 
     } 
    } 

} 

-(void) pressesCancelled:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event { 

    // Works fine! 
    for(UIPress *press in presses) { 
     if(press.type == UIPressTypeMenu) { 
      // do ButtonA job 
      NSLog(@"cancelled"); 
     } 
     if(press.type == UIPressTypePlayPause) { 
      // do ButtonX job 
     } 
    } 
} 
+0

あなたはこれを解決しましたか?私はまた、メニューボタンをキャプチャしようとしています。 –

答えて

2

アプリが出ています。また、そのメソッドをオーバーライドする必要があります.はではありません。アプリを終了しない場合はsuperとしてください(ただし、ここで注意してください:ユーザーがメニューを使用して終了できない場合は非常に不満です)

左矢印と右矢印は、pressesBegan/pressesEndedのメソッドではなく、ジェスチャレコグナイザで処理されるため、フォーカスの変更をトリガします。したがって、ビューでオーバーライドするかどうかは関係ありません。

Event Handling Guide for iOSには、ジェスチャ認識プログラムと相互作用する方法の詳細があります。

+0

潜在的な助けをありがとう!実際に私はまた、プレスをオーバーライドしました.Ended、pressesChanged、pressesCancelled。申し訳ありませんが、私はそれらも私の質問に入れておくべきでした。私はいずれの方法でもスーパーを呼ぶつもりはない。 – jpsquare

+0

これらのメソッドが呼び出されていることは確かですか?デバッガでブレークポイントを設定するか、いくつかのログを追加して確認してください。これらのメソッドのコードを含めるように質問を変更できますか? –

+0

実際にpressededは呼び出されていないようです。しかし、私の最初のビューでpressedEndedは呼び出されていませんが、メニューボタンはまだオーバーライドされています。 – jpsquare

0

はあなたgameSceneでこれを忘れないでください:

override func didMoveToView(view: SKView) { 
    super.didMoveToView(view) 
} 
関連する問題