web-dev-qa-db-ja.com

UINavigationControllerinteractivePopGestureRecognizerがiOS7で異常に動作している

IOS7では、新しい「左から右にスワイプ」ジェスチャがあります。これは非常に便利な機能ですが、問題が発生しました。

このコードを使用して、UINavigationBarの戻るボタンをカスタマイズします。

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

ただし、これにより「左から右にスワイプ」ジェスチャが無効になるため、次のコードを使用してジェスチャを有効のままにします。

self.navigationController.interactivePopGestureRecognizer.delegate = self

そして、ジェスチャが異常に機能していることがわかりました。現在のViewControllerにtableViewがある場合、tableViewがスクロールしていると、ジェスチャはトリガーされません。ジェスチャーを簡単にトリガーできないようになりましたが、修正する方法はありますか?

15
Wei

このコードは私にとってうまく機能します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return [gestureRecognizer isKindOfClass:UIScreenEdgePanGestureRecognizer.class];
}
27
Wei

interactivePopGestureRecognizer.delegateselfに設定することは、最初のステップにすぎません。 2番目のステップは実装することです

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return ![otherGestureRecognizer isKindOfClass:UIPanGestureRecognizer.class];
}

インタラクティブポップの進行中にスクロールビューまたはテーブルビューの垂直スクロールをブロックするには、パンジェスチャレコグナイザーに対するテストが必要です。

4
Ortwin Gentz

クラスコントローラー「UIGestureRecognizerDelegate」を追加します

viewDidApperに追加

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    self.navigationController?.interactivePopGestureRecognizer.delegate =  self
}

=)

4
Bruno