8

私のtvOSアプリには数秒間しか表示されないUIViewControllerがあり、完全にカスタマイズ可能なメニューボタンの処理が必要です。私はそれを次のように作成します:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add a tap gesture recognizer to handle MENU presses.
    UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)];
    [self.view addGestureRecognizer:tapGestureRec];
}

- (void)handleTap:(UITapGestureRecognizer *)sender
{
    // Code to process the MENU button is here.
}

以下を使用してView Controllerを表示しますpushViewController:animated:

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
[self pushViewController:controller animated:isAnimated];

画面が表示され始めてすぐに MENU を押すと、クロスフェード トランジション エフェクトがまだ表示されている間に、ユーザーは UITapGestureRecognizer をかわして前の画面に戻ることができることがわかりましたが、これは意図したものではありません。また、メニューを何度も何度もマッシュすることで問題を引き起こすこともあります。

MENU プレスが常にオーバーライドに達するようにするにはどうすればよいですか? アプリを含む MENU ボタン ハンドラーを指定し、UINavigationController を使用する方法はありますか?

4

2 に答える 2

3

私にとってうまくいった解決策は、UITapGestureRecognizer を にインストールすることでしたself.navigationController.view。通常の UIViewControllers によって見逃されたタップは、代わりにナビゲーション コントローラーのレコグナイザーによってキャッチされます。作成する各ビュー コントローラーに UITapGestureRecognizers をインストールすると、ナビゲーション コントローラーへの亀裂を通過する唯一のタップは、遷移の途中で発生するタップであり、それらのタップを完全に無視しても安全です。

MENU をホーム画面に戻したい場合は、一時的にこのタップ認識機能を削除し、tvOS にタップを独自に処理させる必要があることに注意してください。これは、私のコードでホーム画面に戻るきれいな方法が見つからなかったからです (の短いexit(0))。

于 2016-02-05T01:21:40.767 に答える