UINavigationController
内にネストされたViewControllerがあります。
IOS 7のinteractivePopGestureRecognizerを実装して、ユーザーがジェスチャーでVCをスタックからポップできるようにしました。
VC内にスクロールビューがあり、ユーザーがスクロールビューの上部にいない間は、すべてのchrome(ナビゲーションバーとステータスバー)を非表示にします。コンテンツに焦点を当てます。
ただし、ナビゲーションバーが非表示になっていると、interactivePopGestureRecognizerは機能しません。
消えてから有効にしてみましたが、nilでないことを確認しましたが、それでも機能しません。
足りないものはありますか?
UIViewControllerサブクラスをgestureRecognizerのデリゲートとして設定します。
self.navigationController.interactivePopGestureRecognizer.delegate = self;
それでおしまい!
簡単な解決策
ナビゲーションコントローラーを介さずに、ナビゲーションバーの非表示プロパティを設定するだけです
これらの2行を使用するだけです
self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.hidden = YES;
これを使いました。 self.navigationController.interactivePopGestureRecognizer.delegate = self;
また、UINavigationControllerクラスで、遷移中にinteractivePopGestureRecognizerを無効にします。
- (void)pushViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.enabled = NO;
}
[super pushViewController:viewController animated:animated];
}
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
// disable interactivePopGestureRecognizer in the rootViewController of navigationController
if ([[navigationController.viewControllers firstObject] isEqual:viewController]) {
navigationController.interactivePopGestureRecognizer.enabled = NO;
} else {
// enable interactivePopGestureRecognizer
navigationController.interactivePopGestureRecognizer.enabled = YES;
}
}
}
rootViewControllerでinteractivePopGestureRecognizerを無効にする理由は、rootViewControllerでEdgeからスワイプし、何かをタップして次のviewControllerをプッシュすると、UIはタッチを受け入れなくなります。ホームボタンを押してアプリをバックグラウンドに配置し、タップして入力します。前景...
これは私にはうまくいかないようです。キースルのブログ投稿をフォローしました。それもうまくいきませんでした。
私は最終的にUISwipeGestureRecognizer
で解決しました。それはそれが言うことをしているようです。
UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(backButtonPressed:)];
[gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[self.navigationController.view addGestureRecognizer:gestureRecognizer];
これらの2行を-(void)viewDidAppear:(BOOL)animated
に追加するとうまくいきました。
self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.hidden = YES;
そして、<UIGestureRecognizerDelegate>
を.h
ファイルに呼び出すことを忘れないでください。