1.设置leftBarButtonItem的文字
在设置 leftBarButtonItem的时候,又会少了一个左箭头。
一般情况下,自定义一个新的标题会这样操作,设置完成后,问题来了,发现左箭头不见了。1
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action: (onSelect)];
一般情况下,自定义 UIBarButtonItem 使用设置图片有如下,但发现文本不能设置显示了。1
2[[UIBarButtonItem alloc]initWithImage:image style:UIBarButtonItemStylePlain target:self
action:@selector(onSelect)];
还有一种方式,既有文本又有左箭头的需求,只能使用下面这种方式,自定义一个按钮视图。1
[[UIBarButtonItem alloc]initWithCustomView:backButton];
问题前提: 使用pushViewController的时候,该界面返回情况会默认是上一级的标题, 更改文字,又会对本身产生影响。原本意图很简单,就是想设置自己的文字,又想有左箭头。1
[self.navigationController pushViewController:cityController animated:YES];
2.实现过程
实现这个过程改用了一种做法是 用按钮的方式去完成这件事。这里涉及几个问题。设置了图片的时候,按钮点下去还是会出现蓝色。
在写的时候,会发现Button 的 setImage 和 setBackGroundImage 是有区别的。
setBackGroundImage: 会对原图拉伸产生影响,跟随性。也就是说,按钮宽度改变,底图也发生改变
setImage : 会保持原图性质,不随改变而改变。
在测试过程也是一样。
为了解决点击后保存一致的效果, 改用暴力的方式,对点击下去的情况设置一张透明度的图 。同时对文本设置透明度。这样有点罗嗦和累赘。暂时还没发现更好的方式。有一些人说是设置backBarButtonItem 但是没有效果。我也遇到这个问题。backBarButtonItem 和 leftBarButtonItem 还是有区别。
为了解决按钮图片和文本点击后透明度变化,采取的办法是对两个状态设置不同的UIImage信息。其中这里使用到复制位图的操作,UIGraphicsBeginImageContext 使用这个方式。拷贝一个UIImage副本出来,对其透明度alpha 设置。
这个设计的目标是为 了解决点击后还是变蓝色的问题。
1 | //按钮 |
一切完成后,在刚运行的过程当中,按钮背景图片和文本粘贴在比较紧,可以使用 setImageEdgeInsets的方式让其他拉开一点距离。这样子可以实现一个自定义LeftBarButtonItem。
1 | UIButton *backButton = [[UIButton alloc ]initWithFrame:CGRectMake(0, 0, 60, 30)]; |
3.遇到的问题
问题1: UITabbar选择图片的问题,选中后出现蓝色的问题,而不是自定义的
问题2:按钮点击后,蓝色按钮蓝色的问题
问题3:颜色设置缺少一个0会出现奇特现象
问题4:UIImage的缩放操作
在学习实验过程,遇到问题 UIColor colorWithRed的方法,后缀 255.0 去掉了0 后变成255 会发现很莫名的颜色,这个小数点影响了一些结果。非法奇怪。
1 | UIColor *color = [UIColor colorWithRed:254/255.0 green:85/255.0 blue:90/255.0 alpha:1.0]; |
其次是UITabBarItem 使用了两张图片做状态,一种是默认的情况,一种是选中的效果。会发现变成蓝色。不同不使用UIImage的imageWithRenderingMode的方式去改回原图。这样子这个问题就解决了。
1 | UIImage *image =[[UIImage imageNamed:@"navbar_btn@2x.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; |
而NavigationBar的颜色,也是一个坑的,旧的API只能在旧版本使用,新的版本需要在7.0以上才能使用,这样要兼容6.0 还要挖个坑。有时候 会对背景整个栏目设置,所以在这个情况下只能使用兼容方式。