iOS backBarButtonItem设置
2016-04-16 17:34
399 查看
1、在很多项目中,会看到一个控制器的左上角有一个返回的小按钮,这个按钮有2种情况,一种是backBarButtonItem(自带滑动效果,同时可以返回),一种是leftBarButtonItem(不带滑动效果,可以返回)。对于这2种情况,下面简单分析一下。
2、leftBarButtonItem:顾名思义,就是导航栏的左侧按钮。这个item可以用系统的方法创建,也可以自定义一个button来实现:
上面的3种方法都可以创建一个leftBarButtonItem,但可能效果不太一样,如果想要实现特殊的效果,建议用自定义实现,这样制药控制button的效果就好了。
leftBarButtonItem点击之后,一般就是返回到上层控制器,但是leftBarButtonItem不具备滑动返回上级菜单的,只能通过点击返回。
3、backBarButtonItem自带滑动效果,同时可以返回上级菜单,具备leftBarButtonItem的返回功能。
backBarButtonItem最好通过[[UIBarButtonItem alloc] init]方式创建,通过[[UIBarButtonItem alloc] initWithTitle:<#(nullable NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#>这种方式创建的话,貌似有问题,不建议这样创建。
backBarButtonItem不支持添加action,即便是添加了事件,也不会执行操作,因此不需要利用普通的添加事件的方法创建它,利用[[UIBarButtonItem alloc] init]就可以了。
另外backBarButtonItem的创建是在上层控制器种创建的,在下层控制器才能实现效果,简单来说,比如我有2个控制器ViewController1,ViewController2,并且是ViewController1 push到ViewController2,在ViewController2的左上角需要显示返回按钮,因此backBarButtonItem的创建代码需要在ViewController1中实现,ViewController2中不需要实现任何backBarButtonItem的代码就能实现push到ViewController2后拥有滑动返回效果,如果ViewController2 push到ViewController3,同样只需在ViewController2中实现backBarButtonItem,ViewController3就拥有返回效果了。
4、如果设计需求需要滑动返回效果的话,只实现backBarButtonItem就可以了,但是有一点[self presentViewController:navc animated:YES completion:nil];实现的控制器需要自己写leftBarButtonItem了。
2、leftBarButtonItem:顾名思义,就是导航栏的左侧按钮。这个item可以用系统的方法创建,也可以自定义一个button来实现:
// 利用图片创建 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:<#(nullable UIImage *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#>] // 利用文字创建 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:<#(nullable NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#> // 利用自定义button创建 UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [backBtn setBackgroundImage:[UIImage imageNamed:@"navigation_back"] forState:UIControlStateNormal]; backBtn.frame = (CGRect){CGPointZero,backBtn.currentBackgroundImage.size}; [backBtn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
上面的3种方法都可以创建一个leftBarButtonItem,但可能效果不太一样,如果想要实现特殊的效果,建议用自定义实现,这样制药控制button的效果就好了。
leftBarButtonItem点击之后,一般就是返回到上层控制器,但是leftBarButtonItem不具备滑动返回上级菜单的,只能通过点击返回。
3、backBarButtonItem自带滑动效果,同时可以返回上级菜单,具备leftBarButtonItem的返回功能。
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init]; UIImage* image = [UIImage imageNamed:@"navigation_back"]; [backItem setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [backItem setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) forBarMetrics:UIBarMetricsDefault]; self.navigationItem.backBarButtonItem = backItem;
backBarButtonItem最好通过[[UIBarButtonItem alloc] init]方式创建,通过[[UIBarButtonItem alloc] initWithTitle:<#(nullable NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(nullable id)#> action:<#(nullable SEL)#>这种方式创建的话,貌似有问题,不建议这样创建。
backBarButtonItem不支持添加action,即便是添加了事件,也不会执行操作,因此不需要利用普通的添加事件的方法创建它,利用[[UIBarButtonItem alloc] init]就可以了。
另外backBarButtonItem的创建是在上层控制器种创建的,在下层控制器才能实现效果,简单来说,比如我有2个控制器ViewController1,ViewController2,并且是ViewController1 push到ViewController2,在ViewController2的左上角需要显示返回按钮,因此backBarButtonItem的创建代码需要在ViewController1中实现,ViewController2中不需要实现任何backBarButtonItem的代码就能实现push到ViewController2后拥有滑动返回效果,如果ViewController2 push到ViewController3,同样只需在ViewController2中实现backBarButtonItem,ViewController3就拥有返回效果了。
4、如果设计需求需要滑动返回效果的话,只实现backBarButtonItem就可以了,但是有一点[self presentViewController:navc animated:YES completion:nil];实现的控制器需要自己写leftBarButtonItem了。
相关文章推荐
- 关于ios导航控制器的知识总结
- ArcGIS Runtime SDK for iOS(五) --- 空间几何分析与操作(上)
- ios申请真机调试( xcode 5)详细解析
- iOS中多线程实现方案
- iOS中倒计时
- iOS开发-由浅至深学习block
- iOS——Quartz2D
- iOS学习笔记30-系统服务(三)蓝牙
- iOS学习笔记30-系统服务(三)蓝牙
- 离屏 渲染
- iOS 基本编码格式转化
- autolayout 设置使用tableviewHeaderView
- iOSapp的json告示
- IOS工具方法小节
- iOS顶部 图片 文字 button (底部横线选中) 切换
- iOS蓝牙中的进制转换,数据格式转换
- iOS中点击button切换背景图片与点击切换背景颜色问题的解释
- iOS的URL处理
- iOS 国际化 检测格式是否正确
- iOS9 之后设置状态栏的颜色