37

したがって、iOS 7 アプリ用にビルドしたナビゲーション コントローラーがあります。titleView だけでなく、戻るボタンとナビゲーション バー自体も表示されます。何らかの理由で、インタラクティブ ポップ ジェスチャ (左端からスワイプ) が機能しません。何も起こりません。ジェスチャをログに記録すると、ゼロではありません。この機能を有効にするために何か特別なことはありますか? 動作しない原因は何ですか?

4

10 に答える 10

29

ええと、ジェスチャ デリゲートを設定して、次を実装する必要があったようです。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    return YES;

}
于 2013-09-22T19:37:27.507 に答える
18

この回答とコメントを見てください。ナビゲーション コントローラーのインタラクティブ ポップ ジェスチャ レコグナイザーのデリゲートをnil次のように設定するだけです。

self.navigationController.interactivePopGestureRecognizer.delegate = nil;

プロトコルのすべてのメソッドはオプションであるため、キャストされた自己に設定することもできますが、この場合はデリゲートを設定する方が適切id<UIGestureRecognizerDelegate>だと思います。nil

于 2015-07-20T15:00:36.407 に答える
12

この行をviewDidLoadメソッドに入れることができます。

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
于 2014-09-17T04:25:56.077 に答える
6

より練り上げられた答えは、アーロンとロジャースの両方でした

最初にナビゲーション コントローラーをカスタマイズしてから、このコードをクラスに配置します。

ViewDidload に次の行を入れます。

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

そして、クラスでこの関数を書きます

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES;}
于 2015-12-04T02:31:31.877 に答える
5

多分誰かがこれが役立つと思うかもしれません。

ナビゲーション バーを非表示にしたいが、通常のスワイプ ジェスチャを使用して戻る場合やその他のナビゲーション コントローラー機能を使用する場合は、次を使用する必要があります: ( navigationBar )

self.navigationController?.navigationBar.isHidden = true

ナビゲーション バーを無効にしたい (ナビゲーション バーを非表示にし、戻るためのスワイプを無効にする) が、viewcontroller をプッシュしたい場合は、次を使用する必要があります: ( isNavigationBarHidden )

self.navigationController?.isNavigationBarHidden = true

2018 年 12 月 7 日更新:

推奨される方法:

最初のコントローラーが非表示のナビゲーション バーを使用し、次の子コントローラーがナビゲーション バーを使用している場合、ベース ビュー コントローラーに戻ると、ナビゲーション バーの代わりに黒いバーが表示されます。最初のviewcontroller(父)で使用すると、これは非常に簡単に修正されます:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
于 2018-06-22T13:00:02.807 に答える
2

Swift 4 では、View Controller 内に UITableView があり、次の方法でこの問題を解決しました。

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.interactivePopGestureRecognizer?.delegate=nil
}
于 2018-04-27T06:05:13.627 に答える
0

一般的に、インタラクティブなポップ ジェスチャをアプリ全体に追加します。

XCODE : 9.0、スイフト: 4.0

できれば AppDelegate.swift に UINavigationController を作成してください

  1. ナビゲーション コントローラーを作成する
// I created a global variable, however not necessarily you will be doing this way
var nvc: UINavigationController!
  1. 埋め込むUIGestureRecognizerDelegate
class AppDelegate: UIResponder, UIApplicationDelegate, UIGestureRecognizerDelegate {
  1. アプリケーションのインスタンスUINavigationController化 didFinishLaunchingWithOptions 関数
nvc=UINavigationController()

// For interactive pop gesture
nvc.navigationBar.isHidden=true
nvc?.interactivePopGestureRecognizer?.delegate=self
  1. 追加の手順、アプリケーションの didFinishLaunchingWithOptions 関数のナビゲーション コントローラーにコントローラーを追加します。
window=UIWindow()
window?.rootViewController=nvc
window?.makeKeyAndVisible()

// BaseViewController is sample controller i created with xib
nvc.pushViewController(BaseViewController(), animated: true)
  1. gusture 認識機能を実装し、以下のコードを AppDelegate.swift に追加します
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }



注: の違いについては、このセクションの他の投稿を参照してください。

self.navigationController?.navigationBar.isHidden=true

self.navigationController?.isNavigationBarHidden = true
于 2019-02-26T12:52:53.923 に答える