iOS技术

iOS自定义返回按钮后右滑返回失效

2018-05-07  本文已影响205人  跃文

在自定义返回按钮时在隐藏导航栏后我们会遇到右滑返回手势失效的情况,针对这种情况解决方法如下:

当我们使用代码或者用storyboard来创建一个新的控制器的时候,我们很少注意导航栏的leftItem,因为正常情况下push到下一个界面的leftItem就是上一个界面的self.title,并且它也就是一个返回的功能,所以,我们很少去在意这些~但当我们有些需求,需要自定义leftItem的时候,那么问题就来了:

1.怎么自定义leftItem

//自定义一个返回按钮
    UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setTitle:@"返回" forState:UIControlStateNormal];
    [leftBtn addTarget:self action:@selector(backLastView) forControlEvents:UIControlEventTouchUpInside];
    leftBtn.frame = CGRectMake(0, 0, 60, 40); [leftBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    //将leftItem设置为自定义按钮
    UIBarButtonItem *leftItem =[[UIBarButtonItem alloc]initWithCustomView: leftBtn];
    self.navigationItem.leftBarButtonItem = leftItem;

按钮点击事件 返回上一个界面

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

需要注意的是:xcode自动从6.0之后leftItem距左屏幕边距有16个像素点,这样会导致在视觉上会感觉有点偏右、不美观,对于大多数程序员来说这明显是不能让人去接受的,解决办法 :

设置一下按钮的**contentEdgeInsets**(文字)**imageEdgeInsets**(图片)属性即可,如:
leftButton.contentEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0);

2.怎么解决这个失效问题

self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;

其实到这里,问题应该都解决了,但是,毕竟右滑返回手势只能靠近屏幕左边缘才能使用,我们如何通过调用系统方法来实现在整个屏幕右滑就可以实现返回功能呢,

 id target = self.navigationController.interactivePopGestureRecognizer.delegate;
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];
pan.delegate = self;
[self.view addGestureRecognizer:pan];
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
 - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

        return NO;     //则不需要触发滑动手势
        return YES;   //则需要触发滑动手势
    }
上一篇下一篇

猜你喜欢

热点阅读