繁体   English   中英

iOS 7后退按钮弹出手势

[英]iOS 7 Back Button Pop Gesture

在iOS 7中有新的滑动到弹出手势:您在屏幕左侧从左向右滑动, UINavigationController弹出回到之前的UIViewController

当我创建这样的自定义后退按钮时,滑动到弹出手势不再起作用:

UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:self action:@selector(navigateBack)];
[customBackButton setBackButtonBackgroundImage:barBackBtnImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[customBackButton setBackButtonBackgroundImage:barBackBtnImgHighlighted forBarMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = customBackButton;

如何使用自定义后退按钮并使用原生滑动来弹出手势?

更新:

这就是正在发生的事情navigateBack:

- (void)navigateBack {
    [self.navigationController popViewControllerAnimated:YES];
}

无需添加自己的手势识别器。 UINavigationController已经为您完成了。 在启用interactivePopGestureRecognizer之前,您需要为其设置委托。

做以下两件事:

self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
[self.navigationController.interactivePopGestureRecognizer setEnabled:YES];

只需添加以下代码行:

[self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(handleGesture:)];

您可以添加自己的UIGestureRecognizer并自行弹出UIViewController 有关详细信息,请参阅文档

我用

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"nav_back.png"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"nav_back.png"]];

[UIBarButtonItem.appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -64) forBarMetrics:UIBarMetricsDefault];

为避免崩溃,您必须小心添加和删除自定义后退选择器的方式。 原因是当您按下弹出控制器时导航控制器会保持不变。 如上所述,在添加自定义后退按钮+选择器后,您应该在viewDidApear中执行以下操作。

    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
    {
       self.navigationController.interactivePopGestureRecognizer.enabled = YES;
       self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
       [self.navigationController.interactivePopGestureRecognizer addTarget:self action:@selector(navigateBack)];
    }

然后在viewWillDisapear中做

        if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
        {
           [self.navigationController.interactivePopGestureRecognizer removeTarget:self action:@selector(performCompletion)];
        }

这些电话的时间安排是关键。 否则您可能会遇到崩溃,请在此处查看有关原因的更多详细信息

有一个新的手势识别器UIScreenEdgePanGestureRecognizer 您可以将它分别添加到视图和句柄中(调用navigateBack ),复制视图控制器导航行为。

你在“navigateBack”中做了什么?

使用这样的方法:

- (void)navigateBack
{
    [self.navigationController popViewControllerAnimated:YES];
}

尝试将此添加到自定义后退按钮self.navigationController.interactivePopGestureRecognizer.delegate =(id)self;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM