[英]How to turn off the automatic gesture to go back a view with a navigation controller?
因此,我注意到當用戶在屏幕的最左側(在任一方向上 )滑動時,我的所有視圖都接收到返回(彈出視圖)的手勢( 這是iOS7的新功能 )
到目前為止,我已嘗試使用以下方法將其關閉:
[self.navigationItem setHidesBackButton:YES];
在NavigationController本身的init內(因為委托似乎正在使用它)。
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
加入Gabriele的解決方案。
要在iOS 7之前支持任何iOS,您需要使用以下代碼包裝此代碼:
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
這將阻止App在iOS 6和iOS 5中崩潰,導致缺少選擇器。
我在我的項目中使用此解決方案,它僅禁用interactivePopGestureRecognizer並允許您使用其他手勢識別器。
- (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;
}
}
我發現將手勢設置為禁用只是並不總是有效。 它確實有效,但對我而言,它只是在我曾經使用過背景后才做到的。 第二次它不會觸發反饋。
修復我的是委托手勢並實現shouldbegin方法返回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;
}
對於IOS 8(Swift):
class MainNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
self.interactivePopGestureRecognizer.enabled = false
// Do any additional setup after loading the view.
}
}
在iOS 7之前使用此代碼
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.