您的位置:首页 > 移动开发 > IOS开发

iOS backBarButtonItem设置

2016-04-16 17:34 399 查看
1、在很多项目中,会看到一个控制器的左上角有一个返回的小按钮,这个按钮有2种情况,一种是backBarButtonItem(自带滑动效果,同时可以返回),一种是leftBarButtonItem(不带滑动效果,可以返回)。对于这2种情况,下面简单分析一下。

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了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: