美文网首页
关于 返回按钮 采用系统返回按钮 去掉title

关于 返回按钮 采用系统返回按钮 去掉title

作者: 思绪飘零ing | 来源:发表于2018-10-18 16:19 被阅读0次

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 图B

解释下  

对于图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  .

相关文章

网友评论

      本文标题:关于 返回按钮 采用系统返回按钮 去掉title

      本文链接:https://www.haomeiwen.com/subject/kbhszftx.html