返回按钮定制方法之比较
来源:互联网 发布:proe是什么软件 编辑:程序博客网 时间:2024/06/06 06:37
如果你想在导航栏/工具栏定制一个带左箭头的Bar Button Item,那么有三种可能的方法:
q用png图片定制Bar Button Item ;
q用png图片定制Button ,然后addSubviews至导航栏/工具栏。
q使用私有API按钮类型101,然后addSubviews至导航栏/工具栏;
现在比较三种方法之异同:
一、第1种方法:用png图片定制BarButton Item
UIBarButtonItem* buttonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"backbutton_alpha.png"]
style:UIBarButtonItemStylePlain
target:self
action:@selector(goBackAction)];
toolbar.items = [NSArray arrayWithObjects:buttonItem,nil];
这种方法需要为BarButtonItem准备一张mask图片backbutton_alpha.png。backbutton_alpha.png图片将作为BarButtonItemd的mask(遮罩)图片,与tintcolor一起产生一张背景图片。你不能用一般的png图片,否则按钮会呈现一个实心的方块。一般的png图片,需要通过photoshop等进行处理。比如backbutton_alpha.png实际上是由backbutton_blue.png图片经过‘mask to alpha ’处理得到的。结果处理后的backbutton_alpha.png,只保留了原图的alpha通道信息。
这种方法的好处在于,BarButtonItem的颜色是根据工具栏/导航栏的tintcolor而变的。如上图的第1个按钮,不管工具栏/导航栏的tintcolor做何调整,BarButtonItem的颜色会随之调整,你不需要准备新的图片。缺点是,BarButtonItem不会保留原图的效果(因为颜色信息丢失),它的颜色会比其他两种方法制作的要浅些。
二、第2种方法:用png图片定制Button ,然后addSubviews至导航栏/工具栏
//导航按钮"返回"=======
UIButton* btn = [UIButtonbuttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(80, 8, 47, 28);
[btnsetImage:[UIImageimageNamed:@"backbutton_green.png"] forState:UIControlStateNormal];
[btnaddTarget: selfaction: @selector(goBackAction) forControlEvents: UIControlEventTouchUpInside];
[toolbaraddSubview: btn];
这种方法制作的按钮见上图的第二个按钮。如代码所示,放在工具栏/导航栏上的按钮实际上已经不是BarButtonItem了,而是一个custom button。因此需要为它准备一张png位图。如果工具栏/导航栏的tintcolor发生改变,按钮的颜色样式仍然会是原来的样子,而不会自行调整。所以当工具栏/导航栏的tintcolor发生变化,你需要及时更换custom button的背景图片。优点是,由于使用的是位图,这个按钮可以显示得非常个性和真实。
三、 第3种方法:使用私有API按钮类型101,然后addSubviews至导航栏/工具栏
UIButton* button = [UIButton buttonWithType:101];// left-pointing shape!
[button addTarget:self action:@selector(goBackAction)forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"返回1111" forState:UIControlStateNormal];
button.frame = CGRectMake(140, 7, 87, 28);
[toolbar addSubview: button];
第3种方法本质上仍然同第2种方法,是UIButton的定制而不是BarButtonItem的定制, 如上图第3个按钮所示。
苹果的UIButtonType并不仅仅是API中申明的5个枚举值。超过100的UIButtonType将显示一些特殊的按钮。比如101就是一个backButton样式的导航按钮,110则指定各种tintcolor的水晶按钮。但是这些undocumented的UIButtonType属于苹果“私有API”,可能在新的iOS版本中得不到支持。
但这种方法的好处在于,你不需要让美工为你制作专门的按钮图片。而且它的标题是可以设置的(图片则不行,一旦制作好就不能更改),当文字内容较多时,你还可以指定按钮的frame大小,让按钮大小自然改变,以容纳更多标题文本。
遗憾的是,这种方法无法让按钮颜色根据工具栏/导航栏的tintcolor进行调整。UIButton仍然有tintcolor属性,但一旦你修改UIButton的tintcolor属性,按钮就会失去原有的样式,变成一个Round Rect Button。所以你只能以默认的颜色(蓝色)使用这种类型的按钮(UIButtonType=101)。
四、 结论
尽量采用第2种方法。
demo位于:http://download.csdn.net/detail/kmyhy/4902209。
- 返回按钮定制方法之比较
- 提供一种定制navigationBar返回按钮的方法
- 定制导航栏的返回按钮
- 定制导航栏的返回按钮
- 定制导航栏的返回按钮
- 定制导航栏的返回按钮
- 定制导航栏的返回按钮
- IOS中导航的返回按钮定制
- 导航栏返回按钮的定制
- iOS全局返回按钮定制问题解决方案
- iOS之返回按钮
- 定制导航栏的返回按钮(1)
- 定制导航栏的返回按钮(2)
- 定制NavgationBar 返回按钮的标题 和图标
- ionic 中的navigation,tabbar及返回按钮定制
- 安卓之返回按钮
- Android 之 ActionBar返回按钮
- IOS隐藏navigationItem及返回按钮方法
- Silverlight甘特图:一、甘特图介绍及开发者之系统准备
- 简单的贪心 poj1328
- UITextField
- Android进程线程管理机制与组件生命周期解析
- oracle学习之--6,Oracle数据字典和创建表空间
- 返回按钮定制方法之比较
- URL重写 详解
- 使用apt工具读取APK的InstallLocation
- MAKE手册中的注意点之“多目标”
- centos设置yum源为光盘源
- iOS如何实现无需跳转AppStore直接安装应用
- 修改linux内核开机logo并居中全屏显示
- 把文本解析为htm代码的一段代码
- ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩