大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
UIButton* leftBtn = [UIButtonbuttonWithType:UIButtonTypeSystem];
创新互联主营灵山网站建设的网络公司,主营网站建设方案,成都App定制开发,灵山h5成都小程序开发搭建,灵山网站营销推广欢迎灵山等地区企业咨询
leftBtn.frame=CGRectMake(0,0,25,25);
[leftBtnsetBackgroundImage:[UIImageimageNamed:@"icon_back"]forState:UIControlStateNormal];
[leftBtnaddTarget:selfaction:@selector(leftBarBtnClicked:)forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* leftBarBtn = [[UIBarButtonItemalloc]initWithCustomView:leftBtn];
UIBarButtonItem* spaceItem = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpacetarget:nilaction:nil];
spaceItem.width= -15;
self.navigationItem.leftBarButtonItems=@[spaceItem,leftBarBtn];
前提条件,存在A和B两个页面,A是主界面,A push 到 B
方法一:如果B页面的返回按钮要用自定义的按钮(在iOS7中,如果使用了UINavigationController,那么系统自带的附加了一个从屏幕左边缘开始滑动可以实现pop的手势。但是,如果自定义了navigationItem的leftBarButtonItem,那么这个手势就会失效。)
在A界面:
- (void)viewDidAppear:(BOOL)animated {
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;//重新设置代理
self.navigationController.interactivePopGestureRecognizer.enabled = NO;//本页面不能右滑
}
在B里面:
设置返回按钮:
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(5, 2, 21, 35);
[backBtn setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
[[backBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
[self.navigationController popViewControllerAnimated:YES];
}];
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
self.navigationItem.leftBarButtonItem = backItem;
self.navigationController.interactivePopGestureRecognizer.enabled = YES;//最重要的一步
方法二:在A页面里面(A页面里面的backBarButtonItem其实就是我们看到的B页面的返回按钮,B页面的leftBar是左侧的按钮,注意优先级,B里面有自定义leftBar,显示B页面的,如果没有,看A界面,如果里面有backBarButtonItem,显示,如果没有,就是系统默认的那个)
UIImage* image = [UIImage imageNamed:@"back"];
UIBarButtonItem *item = [[UIBarButtonItem alloc] init];
[item setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[item setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) forBarMetrics:UIBarMetricsDefault];
self.navigationItem.backBarButtonItem = item;
self.navigationItem.backBarButtonItem = item;
我采用的是方法一,方法二我没有办法调整返回按钮的位置
//开启侧滑
1.第一次push进来的时候两个方法都会调用,parent的值不为空。
2.当开始使用系统侧滑的时候,会先调用willMove,而parent的值为空;
3.当滑动结束后返回了上个页面,则会调用didMove,parent的值也为空,如果滑动结束没有返回上个页面,也就是轻轻划了一下还在当前页面,那么则不会调用didMove方法。
当然,直接点击返回按钮,这两个方法也会调用。可以判断parent的值是否为空,进行具体的操作。
//开启侧滑
//关闭侧滑
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
}
在开发过程中,我们经常遇到使用系统导航栏的功能,如何更改返回按钮的样式呢?
重写返回按钮一般是添加leftBarButtonItems。如果导航栏添加了leftBarButtonItems之后,会自动隐藏返回按钮backBarButtonItem。
当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面。但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,可能是其他的页面,我们需要拦截返回按钮的pop操作。
1、重写返回按钮
具体操作查看上面“二、重写返回按钮”。
缺点 :若重写了某个界面的返回按钮,感觉应用整体就不统一了。而且每有一个界面有这个需求都需要重新自定义一个返回按钮,显得不优雅,工作繁琐。
2、为 UINavigationController 添加 category
我们可以为 UINavigatonController 创建一个 Category,来定制navigationBar: shouldPopItem: 的逻辑。
使用时,只需要在需要拦截返回按钮事件的控制器中,应用#import "UIViewController+BackButtonHandler.h",并重写-(BOOL)navigationShouldPopOnBackButton方法即可。