簡體   English   中英

如何關閉自動手勢以使用導航控制器返回視圖?

[英]How to turn off the automatic gesture to go back a view with a navigation controller?

因此,我注意到當用戶在屏幕的最左側(在任一方向上 )滑動時,我的所有視圖都接收到返回(彈出視圖)的手勢( 這是iOS7的新功能

到目前為止,我已嘗試使用以下方法將其關閉:

    [self.navigationItem setHidesBackButton:YES];

在NavigationController本身的init內(因為委托似乎正在使用它)。

OBJ-C

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM