我从here得到了相反的问题 . 默认情况下,在 iOS7
中, UINavigationController
堆栈的后滑动手势可以弹出呈现的 ViewController
. 现在我只为所有 ViewControllers
制作了所有 self.navigationItem.leftBarButtonItem
样式 .
这是代码:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:LOADIMAGE(@"back_button") style:UIBarButtonItemStylePlain target:self action:@selector(popCurrentViewController)];
之后, navigationController.interactivePopGestureRecognizer
被禁用 . 如何在不删除自定义 leftBarButtonItem
的情况下启用弹出手势?
谢谢!
9 回答
首先在viewDidLoad中设置委托:
然后在推送时禁用手势:
并在viewDidDisappear中启用:
当我设置委托时,它适用于我
然后实施
它对我有用 Swift 3 :
并在ViewDidLoad中:
您需要处理两种情况:
当您将新视图推入堆栈时
当您显示根视图控制器时
如果您只需要一个可以使用的基类,这里是一个Swift 3版本:
如果您最终需要在另一个类中充当
UINavigationControllerDelegate
,则可以编写委托转发器similar to this answer .改编自Objective-C的来源:https://github.com/fastred/AHKNavigationController
这是在 iOS 10, Swift 3 中启用/禁用滑动到弹出视图控制器的最佳方法:
For First Screen [ Where you want to Disable Swipe gesture ] :
For middle screen [ Where you want to Enable Swipe gesture ] :
斯威夫特3:
设置自定义后退按钮可禁用滑动后退功能 .
保持它的最好的方法是子类
UINavigationViewController
并将自己设置为interactivePopGestureRecognizer
委托;然后你可以从gestureRecognizerShouldBegin
返回YES以允许滑动 .例如,这是在AHKNavigationController中完成的
这里有一个Swift版本:https://stackoverflow.com/a/43433530/308315
This答案,但有故事板支持 .
对于仍然遇到此问题的人,请尝试将两行分开,如下所示 .
显然,在我的应用中,
在显示视图之前由于某种原因重置为
false
.