首页 文章

iOS 7后退按钮弹出手势

提问于
浏览
16

在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;

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

Update:

那个's what'发生在navigateBack中:

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

7 回答

  • 1

    我用

    [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"nav_back.png"]];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"nav_back.png"]];
    
    [UIBarButtonItem.appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -64) forBarMetrics:UIBarMetricsDefault];
    
  • 2

    只需添加以下代码行:

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

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

  • 0

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

    做以下两件事:

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

    为避免崩溃,您必须小心添加和删除自定义后退选择器的方式 . 原因是当您按下弹出控制器时导航控制器会保持不变 . 如上所述,在添加自定义后退按钮选择器后,您应该在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)];
            }
    

    这些电话的时间安排是关键 . 您可能会遇到崩溃,请参阅here中有关原因的详细信息

  • 3

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

  • 0

    你在“navigateBack”中做了什么?

    使用这样的方法:

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

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

相关问题