Ios 如何使用导航控制器关闭返回视图的自动手势?
因此,我注意到,当用户在屏幕的最左侧(任意方向)滑动时,我的所有视图都会收到返回(弹出视图)的手势(这是iOS7新增的功能) 到目前为止,我已尝试使用以下方法将其关闭,但没有任何效果:Ios 如何使用导航控制器关闭返回视图的自动手势?,ios,objective-c,xcode,ios7,Ios,Objective C,Xcode,Ios7,因此,我注意到,当用户在屏幕的最左侧(任意方向)滑动时,我的所有视图都会收到返回(弹出视图)的手势(这是iOS7新增的功能) 到目前为止,我已尝试使用以下方法将其关闭,但没有任何效果: [self.navigationItem setHidesBackButton:YES]; 在NavigationController本身的init中(代理似乎正在使用它)。obj-c 敏捷的 加布里埃尔的解决方案 要支持iOS 7之前的任何iOS,您需要使用以下代码包装此代码: if([self.na
[self.navigationItem setHidesBackButton:YES];
在NavigationController本身的init中(代理似乎正在使用它)。obj-c
敏捷的
加布里埃尔的解决方案 要支持iOS 7之前的任何iOS,您需要使用以下代码包装此代码:
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
这将停止应用程序在iOS 6和iOS 5中因缺少选择器而崩溃。将此代码用于iOS 7之前的版本
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
我发现将手势设置为“仅禁用”并不总是有效。它确实有用,但对我来说,它只是在我使用了一次后才起作用。第二次它不会触发回击动作 对我来说,解决方法是委派手势并实现shouldbeagin方法以返回NO:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Disable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Enable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return NO;
}
我在我的项目中使用此解决方案,它仅禁用InteractiveProgEstureRecognitor,并允许您使用其他手势识别器
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isEqual:self.navigationController.interactivePopGestureRecognizer]) {
return NO;
} else {
return YES;
}
}
对于IOS 8(Swift):
是 啊这很有效。但它仅在创建NavigationController后在AppDelegate中起作用。我试过初始化并加载导航控制器的实现,但没有成功。你说的初始化并加载导航控制器是什么意思?在我的导航控制器(UINavigationController的子类)中:我试过“-(id)initWithCoder:(NSCoder*)aDecoder{”添加:
super.navigationController.interactiveepogesturerecognizer.enabled=YES;self.navigationController.interactiveepogesturerecognizer.enabled=YES;
我将尝试实现initWithNavigationBarClass:toolbarClass:
和initWithRootViewController:
这两种由UINavigation定义的初始化方法控制器
这不起作用,行:self.navigationController.interactiveepogesturerecognizer.delegate=self返回一个不符合协议的错误。我假设协议需要上述函数,但它不能解决错误。我将它放在viewDidLoad()中在vc上我需要禁用它。没有一个答案适用于iOS8@sole007见下面我的答案..曾为me@PhilHudson显示一些代码。您是否将界面生成器中的NavigationController设置为自定义的?
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// Disable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Enable iOS 7 back gesture
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return NO;
}
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isEqual:self.navigationController.interactivePopGestureRecognizer]) {
return NO;
} else {
return YES;
}
}
class MainNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.interactivePopGestureRecognizer.enabled = false
// Do any additional setup after loading the view.
}
}