UINavigationController自定义返回按钮问题

我们在开发过程中总是会有很多情况下,需要自定义返回按钮的样式,然而我所看到的,在iOS中自定义返回按钮有下面两种方式(欢迎大家来补充)


第一种:改变navigationItem的backBarButtonItem为自定义按钮

self.navigationItem.backBarButtonItem = customBarItem ;

但是我发现这样设置并没有效果,显示的还是原来系统自带的返回按钮


系统自带效果

这里如果大家知道是为什么,可以让我学习学习.


第二种:设置navigationItem的leftBarButtonItem为自定义按钮

self.navigationItem.leftBarButtonItem = customBarItem ;

这种的方式,想要自定义返回按钮的目的就能够达到了

但是

这样设置了之后,iOS自带的左滑返回的功能就莫名其妙了没有了呀!这时候产品就会各种吐槽了.所以到现在就有一个问题了,怎样才能够,既满足美工的需求,也满足产品的需求呢.

先说说我一开始是怎么做的.

1.我在UIViewController的Category中写了一个方法,用来自定义返回按钮.有人可能会问,为什么要写在Category中,不写在父类中,直接继承过来就好.我个人是认为Category的耦合性远比父类要低.至于好处,相信各位攻城狮都知道.

代码贴出来:

//左侧返回的按钮

UIButton* leftButton = [UIButtonbuttonWithType:UIButtonTypeCustom] ;

leftButton.frame=CGRectMake(0,0,30,30) ;

[leftButtonsetContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft] ;

[leftButtonsetImage:[UIImageimageNamed:@"nav_back_hlighted"]forState:UIControlStateHighlighted] ;[leftButtonsetImage:[UIImageimageNamed:@"nav_back_hlighted"]forState:UIControlStateSelected] ;

[leftButton addTarget:selfaction:selectorforControlEvents:UIControlEventTouchUpInside] ;

[leftButtonsetImage:[UIImageimageNamed:@"nav_fh"]forState:UIControlStateNormal] ;

CGFloatnavPadding =QM_NAVITEMPADDING;

UIBarButtonItem* leftBarItem = [[UIBarButtonItemalloc]initWithCustomView:leftButton] ;

self.navigationItem.leftBarButtonItem= leftBarItem ;

// 设置返回的手势为可用状态

self.navigationController.interactivePopGestureRecognizer.enabled=YES;

2.上面这段代码,我是在viewDidLoad里面调用的,只是改变了返回按钮的样式,但是左滑返回的手势并不起作用.

我又在网上找了一些文章,有个文章是说要将返回手势的delegate给现在的控制器

参考链接:http://blog.csdn.net/wmqi10/article/details/16850479

3.于是我又在上面的代码最后增加了代理,并且还是在Category中实现了gestureRecognizerShouldBegin方法,隐式遵循代理是可行的,但是我也不知道坏处是什么...

结果就是,在上面那段代码最后增加

self.navigationController.interactivePopGestureRecognizer.delegate=self;

然后实现gestureRecognizerShouldBegin代理方法:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer*)gestureRecognizer{

if(self.navigationController.viewControllers.count ==1){

//关闭主界面的右滑返回

returnNO;

}else {

returnYES;

}

}

这样左滑的手势就有作用了

你可能感兴趣的:(UINavigationController自定义返回按钮问题)