https://www.cnblogs.com/wi100sh/p/5605115.html
1写个demo 研究了下 返回按钮 目前为止的 返回按钮 一般都是 只是一个< 后面的 title文字 并不需要
实现这个 有两种方式
1. 是 写一个按钮 来 完全替代掉 页面的 leftBarButtonItem
在baseVC 里面 或者是当前 VC 都可以
- (void)addLeftButtonItemWithImage:(NSString*)name selected:(NSString*)nameSel {
if(!name && !nameSel) {
return;
}
UIButton*btnRight;
// btnRight.backgroundColor = kColorRed;
if([nameSelisEqualToString:@"title"]) {//只设置title
btnRight = [UIButton buttonWithType:UIButtonTypeCustom];
// btnRight.titleLabel.font = kFontSystem(15);
btnRight.titleLabel.font = [UIFont systemFontOfSize:18.];
[btnRightsetTitle:name forState:UIControlStateNormal];
[btnRightsetTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[btnRightsetTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
[btnRightsetTitleColor:[UIColor whiteColor] forState:UIControlStateDisabled];
btnRight.contentMode = UIViewContentModeCenter;
CGFloatwidth = [namesizeOfNSStringWithFont:btnRight.titleLabel.font].width;
[btnRightsetFrame:CGRectMake(0,0,2*width,44)];
[btnRightsetTitleEdgeInsets:UIEdgeInsetsMake(0, width, 0, 0)];
// UIImageView *image = [[UIImageView alloc]init];
// image.frame = CGRectMake(0, 0, 2*width, 44);
// image.backgroundColor = IFMColor(253, 145, 36);
// image.alpha = .3;
// [btnRight addSubview:image];
}else{//设置图片
btnRight = [UIButton buttonWithType:UIButtonTypeCustom];
[btnRightsetImage:[UIImage imageNamed:name] forState:UIControlStateNormal];
[btnRightsetImage:[UIImage imageNamed:nameSel] forState:UIControlStateSelected];
[btnRightsetImage:[UIImage imageNamed:nameSel] forState:UIControlStateHighlighted];
[btnRightsetFrame:CGRectMake(0, 0, 2 * (btnRight.imageView.image.size.width), (btnRight.imageView.image.size.height))];
[btnRightsetImageEdgeInsets:UIEdgeInsetsMake(0, 0,0, (btnRight.imageView.image.size.width))];
}
// btnRight.backgroundColor = kColorRed;
[btnRightaddTarget:self action:@selector(leftBarButtonItemEvent:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithCustomView:btnRight];
self.navigationItem.leftBarButtonItem = rightItem;
}
- (void)leftBarButtonItemEvent:(id)sender {
}
如果是在baseVC里面 写的 在push过去的VC 里面调用这个方法 然后重写这个返回按钮方法 实现 返回方法 就好 但是这种取代了返回按钮的方法 是可以实现自定义返回按钮的 但是需要自己处理系统右滑 返回的 代理 需要在viewdidload 里面实现 下面方法
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
2. 第二种方法 是我 想记录的 就是 我们 仍然 采用原来的返回按钮 只是 把返回按钮的 title 去掉 这样就可以不用处理 手势返回 了 那么 怎么写呢 其实很简单 就两行代码 (我是 写在 baseVC 里面的 viewdidload的)
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = back;
采用设置 vc的 backBarButtonItem 的方式 设置返回按钮
接下来 讲解下self.navigationItem.backBarButtonItem 和 self.navigationItem.leftBarButtonItem 的区别 你就知道我为啥 把 上面的代码 放到basevc 里面了


解释下
对于图A来说 图A的VC 的navigationItem.leftBarButtonItem 就是 本身的左上角按钮 navigationItem.rightBarButtonItem 就是本身的右上角按钮
同理 对于 图B 一样适用
但是 对于 图B 来说 左上角 按钮 同时 还被称为 图A vc的navigationItem.backBarButtonItem 那么这两个空间 角俩名字就涉及到优先级问题 这里 是 navigationItem.leftBarButtonItem > navigationItem.backBarButtonItem 也就是说 我设置了 A页面的navigationItem.backBarButtonItem 也设置了 B 也面的 navigationItem.leftBarButtonItem 那么 看到的图B 的vc 就是navigationItem.leftBarButtonItem
我的总结就是 如果 我从A 视图 push到B视图 那么 如果我想要 设置图B 视图的返回 按钮 只有一个< 没有title文字 那么就需要 在 A 视图 设置 A视图的 self.navigationItem.backBarButtonItem .
网友评论