iPhone开发-UIButton setImage的同时也显示title

想要做一个按钮,按钮上半部分显示图片(Image),下半部分显示文字(Title)(文字位置不固定),显示效果如下图:

UIButton有两个设置Image的方法,一个是setImage,一个是setBackgroundImage。到底用哪个方法呢,既然不确定,那就测试下,看看哪个符合自己的要求。

1.先测试setImage方法,在IB(xib或storyboard)中拖拽一个UIbutton控件,之后设置Image属性,如下图:

之后看刚才拖拽的UIButton控件的样式,如下图:

无论你怎么放大这个按钮,按钮中的图片的大小是不会随之变化的(当然缩小按钮,图片会随之压缩)。

如果不喜欢IB的朋友,可以用代码实现,代码如下:

[objc] view
plain
copy

  1. UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(30, 30, 100, 100)];  
  2. [btn setImage:[UIImage imageNamed:@"add_album"] forState:UIControlStateNormal];  

2.测试setBackgroundImage方法,选中刚才的button控件,之后删除Image的内容,在Background中添加图片名称,如下图:

之后观察按钮,发现按钮样式变为

放大按钮,图片也随之放大。

代码实现如下

[objc] view
plain
copy

  1. UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(30, 30, 100, 100)];  
  2. [btn setBackgroundImage:[UIImage imageNamed:@"add_album"] forState:UIControlStateNormal];  

经过上面测试,发现用setImage方法设置的图片,图片不会随着按钮的放大而放大,图片始终是原始图片尺寸,而用setBackgroundImage方法设置的图片,图片会随着按钮的变大而拉伸变大。这里我选择了第一种方法,各位看官,请随意。

那么如何设置按钮Title的位置,让其显示在底部呢,Title默认是居中显示。这就要用到inset属性了,先选中按钮,之后在Edge的选项中选择Title,之后调节Inset的Top和Left等参数,使其Title位置在底部。如下图:

这样就完成了按钮title和按钮图片位置自定义的效果了。

代码实现设置inset:

[objc] view
plain
copy

  1. UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(30, 30, 100, 100)];  
  2.     [btn setImage:[UIImage imageNamed:@"add_album"] forState:UIControlStateNormal];  
  3.     [btn setTitle:@"Title" forState:UIControlStateNormal];  
  4.    //[btn setImageEdgeInsets:(UIEdgeInsets)]  
  5.     [btn setTitleEdgeInsets:UIEdgeInsetsMake(75, -19, 0, 0)];  
  6.     [self.view addSubview:btn];  

另:如果不喜欢调整Inset,可以在按钮上放置个Label,把按钮自带的Title设置为空,用Label冒充Title,调整Label的frame,同样可以实现这个效果。

时间: 2024-08-30 06:24:32

iPhone开发-UIButton setImage的同时也显示title的相关文章

iphone开发笔记

  退回输入键盘   - (BOOL)textFieldShouldReturn:(id)textField{     [textField resignFirstResponder]; }   CGRect CGRect frame = CGRectMake (origin.x,origin.y, size.width, size.height):矩形 NSStringFromCGRect(someCG) 把CGRect结构转变为格式化字符串: CGRectFromString(aString

iPhone开发中给键盘加个隐藏工具条

  因为iPhone手机采用的触摸涉及,本身没有硬件键盘,一般都是点击输入框之后,弹出一个虚拟键盘出来,因此在iPhone开发中,经常在完成编辑输入之后,要写程序代码来关闭软键盘的输出,非常繁琐,当然关闭软键盘的方式有很多,比如放一个按钮在底层,通过点击屏幕的空白处来关闭键盘;也可以处理Return键盘事件来关闭键盘,这些暂且不说,本文要分享的是一个键盘顶部工具条的类,通过这个工具条,可以很方便的关闭键盘,而且有上一项,下一项的输入框切换,非常方便,效果请看下图: 类文件如下: KeyBoard

iPhone开发内存管理

  开发iPhone 应用程序并不难,基本上就是三个词 - "memory, memory, memory" .iPhone OS 对内存的要求很严格,有memory leak ,杀掉; 内存使用超限额,杀掉.一个经过测试的程序,在使用过程中90%以上的崩溃都是内存问题造成的.在这里简单总结一下Object-C 内存管理. 基本概念 Object-C 的内存管理基于引用计数(Reference Count)这种非常常用的技术.简单讲,如果要使用一个对象,并希望确保在使用期间对象不被释放

iPhone开发环境的安装

  ---iPhone开发环境的安装 今天讲讲iPhone开发环境的安装,目前在Windows上没有一个完善的iPhone开发平台,我们只能借助虚拟机安装Mac系统后在其上进行iPhone的开发,Mac的安装方法网络上介绍文章不少,以下安装过程不少图片来源于网络. 用的系统是 Mac os 10.6.3 ,开发环境是从Apple官网下载的xcode_3.2.4_and_ios_sdk_4.1. 一.安装Mac 首先打开VMWare Workstation 7.1.使用File->New->Vi

(译)OpenGL ES2.0 – Iphone开发指引

纯的不能再纯的转载,原译者说别人是牛人,不过在我看来,他也挺牛的了. 刚接触OpenGL ES时,这篇文章不知看了多少遍了,只能照本宣科,不知其然与其所以然. 后决定放弃这种不负责任的工作方式,虽然不是我的方式,但我又必须按要求做事! 按自已的想法,找到罗朝辉博客上最全面的那篇,把例子下载下来,准备花长些时间,耐下心来,一点一点地看. 到目前,从几何顶点,到灯光,到着色器,再到模型加载,最后是纹理,中间回到几何顶点几次,轻轻地,仅是轻轻地扒了一小层皮儿而已,现在再回头看这篇,感觉明白了许多. 不

图解iPhone开发入门教程

现在的智能手机越来越风行了,其中尤以Apple的iPhone和Google的Android系统最为流行,这里我将向大家介绍iPhone开发的基础知识.为了便于初学者尽快上手,我尽量以代码加截图的方式加以说明. 要想进行iPhone开发,Mac和iPhone是必不可少的,虽然有人通过一些手段也能在PC上装上Mac,使用上"黑苹果",但毕竟不是正统,经常会出现这样那样的问题,比如无线不行,声卡不行之类的问题,因此Mac最好还是要有的:至于iPhone,虽然可以通过模拟器在电脑上查看程序的运

Windows Phone 7开发教程(4)——XNA显示中文字体

我最近勤快地连自己都有些不可思议.昨天有朋友在上一篇文章里留言,批 评Windows Phone 7暂时没有支持中文版的问题.凡事都有个过程,在中文版出 来前,咱们想自己想点办法吧.Silverlight for Windows Phone那边就不管了 ,肯定会有人想出办法来的.如何让Windows Phone 7游戏显示中文?把说"贴 图"的那个人拖出去打死!因为XNA 4.0中支持中文的办法倒是现成的,这与XNA 字体支持的方式有很大关系. 示例代码下载地址: http://fil

Android简明开发教程十一:自定义Adapter显示列表

在介绍数据绑定时,我们使用了系统自带的SimpleAdapter.Android 允许自定义Adapter ,理论上可以使用任意的View (Layout)来显示数据.下图是对AndroidGraphics2DTutorial做改动,使用自定义Adapter来显示示例Activity列表. 开发教程十一:自定义Adapter显示列表-"> 在例子中我们把原来的AndroidGraphics2DTutorial改名为AndroidGraphics2DTutorial1,重新创建一个类 And

IPad/IPhone 开发中的布局问题

  初步学习IOS(IPad/IPhone)开发,这两天在界面布局上花了很多时间. IOS的界面方法有两种方式: 1 使用Interface Builder创建界面,然后和相应的controller相关联 2 通过code手动的添加UI组件和布局 优缺点: 方法1可以创建界面快捷而简单,也会比较易于维护.缺点就是动态性不够,据说性能上也会差些(由于需要读取XIB文件). 方法2的优点就是比较灵活和可控.缺点正好是方法1的优点的方面. 个人对这两种方式的体会: *使用方法1来划分组件,每个功能都有