UIButton 根据自己的需求对内部控件重新qt水平布局控件大小

> iOS开发:常用的UIView控件——UILabel、UITextField、UIButton
iOS开发:常用的UIView控件——UILabel、UITextField、UIButton
相关推荐:UIView:UIView (视图):表示屏幕上一块矩形区域,在屏幕上看到的内容都是UIView或者是UIView的子类.UIView是一个基类,提供了关于视图展示,管理,以及层级关系的基本功能. 视图的使用分为四大步: 1.创建视图对象. 2.配置属性(比如back
前面几篇文章已经对iOS开发中比较基本的几个文件进行了了解,今天主要学习StoryBoard文件和几个常见的UI控件。Storyboard功能是在iOS5开始新增的功能,一种新技术的出现大多是为了弥补旧技术的不足,而在storyboard之前iOS 开发设计界面是使用nib文件(xib),storyboard文件相对nib文件的好处主要体现在storyboard能够非常直观地展示app中不同视图控制器之间的跳转关系,因为所有这些视图控制器都在一个文件之中,并且视图控制器的跳转不需要编写大量代码(像xib)来实现,而是通过在不同视图控制器之间连接Segue来实现的。Segue不仅代表了视图控制器之间的跳转,而且还可以用来在视图控制器跳转过程中传递数据。还是看看Apple对storyboard的官方文档吧:A storyboard is a visual representation of the user interface of an iOS application, showing screens of content and the connections between those screens. A storyboard is composed of a sequence of scenes, each of which represents a view cont scenes are connected by segue objects, which represent a transition between two view controllers.storyboard是iOS app中用户界面的一个可视化展现,它显示了多个界面内容以及这些界面之间的联系。一个storyboard是由一系列的场景组成的,每一个场景都代表了一个视图控制器还有他的视图。场景由Segue对象连接起来,Segue对象代表了两个视图控制器之间的转换。了解了什么是storyboard后,接下来看看如何在storyboard中放置常用的UI控件以及这些控件的用法,最终实现如下的效果:UILabel用来显示静态的单行或多行文本,不可编辑。UITextView用来显示可以编辑的文本并且在用户编辑完按下键盘上的return按钮的时候向目标对象发送消息。UIButton用来接收触摸事件并且向目标对象发送消息。新建一个single view application项目,打开storyboard文件,在右侧编辑框里面选中Objects Library(如果没有则在菜单View-&Utilities-&Show Objects Library打开,找到Label,将该项目拖动到storyboard视图中,Xcode会有显示布局的提示线条,放到合适的位置,找到TextField拖动到storyboard中,同样找到Button拖动到storyboard中,并且如图排列好。选中第一个Label,切换到属性检查器,属性检查器中有两个分组,一个是label,表示该类有的属性,一个是view,下面表示从view继承来的属性,因此在随后介绍的UI TextField和UIButton都继承自View,他们下面的view分组属性将一样,不再重复,以下介绍label常用属性:Text:标签显示的文本内容,可以有Plain普通文本或者Attributed格式化的文本。选择格式化的文本可以为文本的不同部分指定不同的属性。Color、Font、Alignment:不多说,颜色、字体、对齐方式。Lines:限制显示的文本最大行数,0表示不限制行数Behavior:Enabled是否启用,不启用则显示为淡灰色,highlighted,是否高亮,label默认没效果的。可与下面Highlighted属性配合。Highlighted:设置高亮颜色。LineBreaks:设置当换行时的截断模式,可以从单词截断,字母截断或者不够显示了截断前面(中间、结尾)并显示省略号。Shadow:设置阴影颜色。Shadow Offset:设置阴影偏移量。Tag:标记,在代码中调用。Alpha、Background:透明度、背景点中TextField,与Label相同的属性略过。PlaceHolder:显示占位字符串,在用户没有点击输入前显示,一旦用户点击开始输入,此字符串马上消失。ClearButton:如何显示清空的按钮,(始终,编辑时显示等等)。Capitalization:如何将输入英文大写化,句子首字母?还是每个单词首字母等等。Correction:是否纠正拼写。Keyboard:显示何种键盘。Appearance:外观是暗色还是明亮Return Key:在键盘右下角的回车键显示的文本。Secure:是否使用星号代替字符,本例密码输入框要勾选该选项。由于Xcode集成了强大的可视化编辑器interface builder,因此就算是没有过iOS开发经验的开发者也可以通过拖动控件,在属性检察器尝试修改属性从预览界面看到该属性的效果与作用,因此此处不再赘述如何通过IB布局简单的界面,下面将介绍如何通过代码的形式来创建界面。首先新建一个空白的项目,打开AppDelegate.m文件,开头有这个方法:- (BOOL)application:(UIApplication *)applica相关推荐:UITableView掌握点设置UITableView的dataSource、delegate UITableView多组数据和单组数据的展示 UITableViewCell的常见属性 UITableView的性能优化(cell的循环利用) 自定义Cell如何展示数据UITableView需要一个数据源(dataSource)来显示数据 tion didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// Override point for customization after application launch.self.window.backgroundColor = [UIColor whiteColor];[self.window makeKeyAndVisible];return YES;}我们将在这个方法里面添加构建界面的代码。可以看到该方法持有一个window对象,正如前面的文章所讲,该window对象代表了该界面的窗口视图层级的根节点,因此我们新建的视图都必须添加到该节点上。修改该方法如下:1&span style=&white-space:pre&& &/span&- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions2&span style=&white-space:pre&& &/span&{3&span style=&white-space:pre&& &/span&self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];4&span style=&white-space:pre&& &/span&// Override point for customization after application launch.5 6 &span style=&color:#ff0000;&&UILabel *welcomeLbl = [[UILabel alloc] init];7 welcomeLbl.frame = CGRectMake(100, 50, 85, 30);8 welcomeLbl.text = @&欢迎登陆&;9 welcomeLbl.textAlignment = NSTextAlignmentC10// welcomeLbl.backgroundColor = [UIColor grayColor];11 [self.window addSubview:welcomeLbl];12 13 UILabel *nameLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 90, 80, 30)];14 nameLbl.text = @&姓名:&;15 nameLbl.textAlignment = NSTextAlignmentR16// nameLbl.backgroundColor = [UIColor lightGrayColor];17 [self.window addSubview:nameLbl];18 19 UITextField *nameTf = [[UITextField alloc] initWithFrame:CGRectMake(100, 90, 160, 30)];20 nameTf.borderStyle = UITextBorderStyleRoundedR21 nameTf.placeholder = @&请输入名字&;22 23 [self.window addSubview:nameTf];&/span&24 25self.window.backgroundColor = [UIColor whiteColor];[self.window makeKeyAndVisible];return YES;}红色部分为修改的,看第一段部分:第6行首先为welcomeLbl分配(alloc)一个存放UILabel对象的空间,然后像该对象发送init消息初始化,第7行设置该标签的frame属性,一个frame属性规定了该控件的位置和大小,四个参数依次分别表示x坐标,y坐标,宽度,高度。也可以像下面nameLbl的初始化一样直接使用initWithFrame初始化时赋给frame对象。在属性检查器中能够设置的属性在代码也同样能够设置,接下来第9行设置了标签的文本对齐方式为右对齐,第10行的注释语句设置了背景颜色,可以在调试frame属性的时候打开注释,方便调试frame的设置效果。前面说了window是视图层级的根节点,因此要想标签能在屏幕上显示,必须将其添加到window上,第11行将welcomeLbl添加到window视图上。到目前为止的代码运行如下:开发者朋友可以按照这样的思路接着完成下面的密码输入框和两个按钮。最终效果如下
相关推荐:XIB使用入门在iOS开发中,我们一般建议使用代码创建UI,因为使用代码创建UI并进行布局在后期维护时会相对容易,代码的扩展性和可重用性也是很好的,而且可以实现动态加载很多数据。但如果你对代码布局觉得繁琐,希望快速的根据用户需求做出界面原型,那么
前面几篇文章已经对iOS开发中比较基本的几个文件进行了了解,今天主要学习StoryBoard文件和几个常见的UI控件。Storyboard功能是在iOS5开始新增的功能,一种新技术的出现大多是为了弥补旧技术...
------分隔线----------------------------
相关阅读排行ios基础(6)
UIButton内部文本和图片的布局是我们日常代码中,不可缺少的部分,按钮默认左边图片右边文本,那要实现左边文本,右边图片,我们该怎么解决呢,上面图片,下面文本又该怎么办呢
其实很简单,今天总结下,目前主要用两种方式,一种就是重写按钮,另一种就是通过setTitleEdgeInsets和setImageEdgeInsets方法解决
下图是按钮默认情况下的图文布局
左边文本,右边图片
首先介绍重写按钮吧,新建一个按钮继承UIButton,
-&(void)layoutSubviews
{&&&&[super&layoutSubviews];&&&&&
&&&&&CGRect&imageRect&=&self.imageView.
&&&&&imageRect.size&=&CGSizeMake(30,&30);&&&&
&&&&&imageRect.origin.x&=&(self.frame.size.width&-&30)&;&&&&
&&&&&imageRect.origin.y&=&(self.frame.size.height&&-&30)/2.0f;&&&&&&&&&&
&&&&&CGRect&titleRect&=&self.titleLabel.&&&&&&&
&&&&&titleRect.origin.x&=&(self.frame.size.width&-&imageRect.size.width-&titleRect.size.width);&&&&&&&
&&&&&titleRect.origin.y&=&(self.frame.size.height&-&titleRect.size.height)/2.0f;&&&&&&&
&&&&&self.imageView.frame&=&imageR&&&&self.titleLabel.frame&=&titleR
效果如下:
上面图片,下面文本
同样用重写按钮的方法
-&(void)layoutSubviews{
&&&&[super&layoutSubviews];&&&&CGRect&imageRect&=&self.imageView.
&&&&imageRect.size&=&CGSizeMake(30,&30);
&&&&imageRect.origin.x&=&(self.frame.size.width&-&30)&*&0.5;
&&&&imageRect.origin.y&=&self.frame.size.height&*&0.5&-&40;&&&&CGRect&titleRect&=&self.titleLabel.
&&&&titleRect.origin.x&=&(self.frame.size.width&-&titleRect.size.width)&*&0.5;
&&&&titleRect.origin.y&=&self.frame.size.height&*&0.5&;&&&&self.imageView.frame&=&imageR&&&&self.titleLabel.frame&=&titleR
效果如下:
![屏幕快照
10.23.11.png](
另一种方法就是通过setTitleEdgeInsets和setImageEdgeInsets方法解决
这种方法的最大好处,就是不要在重写UIButton,直接在新建的UIButton中改变上面两个属性的值就可以达到我们想要的结果
左边文本右边图片
代码如下:
UIButton&*btn1&=&[UIButton&buttonWithType:UIButtonTypeCustom];
&&&&btn1.frame&=&CGRectMake(50,&100,&80,&40);
&&&&[btn1&setImage:[UIImage&imageNamed:@&icon_shouye&]&forState:UIControlStateNormal];
&&&&[btn1&setTitle:@&首页&&forState:UIControlStateNormal];
&&&&[btn1&setTitleColor:[UIColor&blackColor]&forState:UIControlStateNormal];
&&&&btn1.backgroundColor&=&[UIColor&redColor];&&&&UIButton&*btn&=&[UIButton&buttonWithType:UIButtonTypeCustom];
&&&&btn.frame&=&CGRectMake(50,&50,&80,&40);
&&&&[btn&setImage:[UIImage&imageNamed:@&icon_shouye&]&forState:UIControlStateNormal];
&&&&[btn&setTitle:@&首页&&forState:UIControlStateNormal];
&&&&[btn&setTitleColor:[UIColor&blackColor]&forState:UIControlStateNormal];
&&&&btn.backgroundColor&=&[UIColor&redColor];&&&&
&&&&btn.imageEdgeInsets&=&UIEdgeInsetsMake(0,&btn.frame.size.width&-&btn.imageView.frame.origin.x&-&btn.imageView.frame.size.width,&0,&0);
&&&&btn.titleEdgeInsets&=&UIEdgeInsetsMake(0,&-(btn.frame.size.width&-&btn.imageView.frame.size.width&),&0,&0);
&&&&[self.view&addSubview:btn1];
&&&&[self.view&addSubview:btn];
完全颠倒的效果
上面图片下面文本
代码如下:
&UIButton&*btn&=&[UIButton&buttonWithType:UIButtonTypeCustom];
&&&&btn.frame&=&CGRectMake(50,&50,&80,&60);
&&&&[btn&setImage:[UIImage&imageNamed:@&icon_shouye&]&forState:UIControlStateNormal];
&&&&[btn&setTitle:@&首页的事&&forState:UIControlStateNormal];
&&&&[btn&setTitleColor:[UIColor&blackColor]&forState:UIControlStateNormal];
&&&&btn.backgroundColor&=&[UIColor&redColor];
&&&&btn.imageEdgeInsets&=&UIEdgeInsetsMake(-&(btn.frame.size.height&-&btn.titleLabel.frame.size.height-&btn.titleLabel.frame.origin.y),(btn.frame.size.width&-btn.titleLabel.frame.size.width)/2.0f&-btn.imageView.frame.size.width,&0,&0);
&&&&btn.titleEdgeInsets&=&UIEdgeInsetsMake(btn.frame.size.height-btn.imageView.frame.size.height-btn.imageView.frame.origin.y,&-btn.imageView.frame.size.width,&0,&0);
&&&&[self.view&addSubview:btn];
关于setTitleEdgeInsets和setImageEdgeInsets下面进行一些解释:
UIButton内有两个控件titleLabel和imageView,可以用来显示一个文本和图片,这里的图片区别于背景图片。给UIButton设置了title和image后,它们会图片在左边,文本在图片右边显示。它们两个做为一个整体依赖于button的contentHorizontalAlignment居左居右或居中显示。
显示格式区分:
1.当button.width & image.width时,只显示被压缩后的图片,图片是按照fillXY的方式压缩。
2.当button.width & image.width,且button.width & (image.width+text.width)时,图片正常显示,文本被压缩。
3.当button.width & (image.width+text.width)时,两者并列默认居中显示,可通过button的属性contentHorizontalAlignment改变对齐方式。
想改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。对titleLabel和imageView设置偏移是针对他当前的位置起作用的,并不是针对距离button边框的距离的。
typedefNS_ENUM(NSInteger, UIControlContentHorizontalAlignment) {
& &UIControlContentHorizontalAlignmentCenter =0,//居中
& &UIControlContentHorizontalAlignmentLeft & =1,//居左
& &UIControlContentHorizontalAlignmentRight &=2,//居右
& &UIControlContentHorizontalAlignmentFill & =3,//
想两改变两个子控件的显示位置,可以分别通过setTitleEdgeInsets和setImageEdgeInsets来实现。需要注意的是,对titleLabel和imageView设置偏移,是针对它当前的位置起作用的,并不是针对它距离button边框的距离的。感觉设置不设置UIControlContentHorizontalAlignmentCenter居中都没有影响,这个网上也找了些相关的信息,感觉都没有说到重点,我这里也没有完全理解透彻,之前都是在设置setTitleEdgeInsets和setImageEdgeInsets这些参数时都是不停的尝试得到的结果。目前这是我理解后,代码实现最后的答案,希望可以帮到大家。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1046次
排名:千里之外当前位置: &>&&>& >
本节知识点:
什么是UIButton
UIButton的状态
UIButton的属性设置
UIButton基本使用步骤
UIButton的代码创建与常用属性设置
重写按钮的某个状态属性的 setter 或 getter 方法设置按钮的状态
调整UIButton内部布局
1. 什么是UIButton
还有一个非常重要的UI控件---UIButton,俗称“按钮”
一般情况下,点击某个控件后,会做出相应反应的都是按钮
按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置
作用:监听用户的点击事件,在用户点击后做出响应
UIButton – 按钮.png
2. UIButton的状态
1. normal(普通状态)
默认情况(Default)
对应的枚举常量:UIControlStateNormal
除开UIControlStateHighlighted、UIControlStateDisabled、UIControlStateSelected以外的其他情况,都是normal状态
这种状态下的按钮【可以】接收点击事件
如果前后连着设置按钮同时处于多种状态, 则表现出来的也是 normal 状态, 除去如果有 设置为 enabled = NO; 则会进入UIControlStateDisabled状态(包括颜色), 不能点击
//下面两种杂交在一起(就不是 normal 后面三种 ), 会显示为 Normal 状态的颜色,
//但是 设置了 Enabled == NO,
所以这里也是不能点击的,
self.button.selected = YES;
self.button.enabled = NO;
2. highlighted(高亮状态)
对应的枚举常量:UIControlStateHighlighted
【当按住按钮不松开】或者【highlighted = YES】时就能达到这种状态
这种状态下的按钮【可以】接收点击事件
3.selected (选中状态)
对应的枚举常量: UIControlStateSelected
【button.selected = YES】时就能达到这种状态
这种状态下的按钮【可以】接收点击事件
4. disabled(失效状态,不可用状态)
如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
对应的枚举常量:UIControlStateDisabled
【button.enabled = NO】时就能达到这种状态
这种状态下的按钮【无法】接收点击事件
5. 让按钮无法点击的2种方法
button.enabled = NO;
【会】进入UIControlStateDisabled状态
button.userInteractionEnabled = NO;
【不会】进入UIControlStateDisabled状态,继续保持当前状态
3. UIButton的属性设置
设置按钮的背景图片
设置按钮在不同状态下的背景图片(为了保证高亮状态下的图片正常显示,必须设置按钮的type为custom)
UIButton – 设置按钮的背景图片.png
按钮的样式type属性
实际上,UIButton自带了很多种不同的样式
UIButton – 按钮的样式.png
知识点:Detail Disclosure/info Light/info Dark长一样(iOS7以前不一样,扁平化以后都一样,残留的东西)
UIButton的常见属性
- (void)setTitle:(NSString *)title forState:(UIControlState)
//设置按钮的文字
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)
//设置按钮的文字颜色
- (void)setImage:(UIImage *)image forState:(UIControlState)
//设置按钮内部的小图片
- (void)setBagroundImage:(UIImage *)image forState:(UIControlState)
//设置按钮的背景图片
//设置按钮的文字字体(需要拿到按钮内部的label来设置)
btn.titleLabel.font = [UIFont systemFontOfSize:13];
- (NSString *)titleForState:(UIControlState)
//获得按钮的文字
- (UIColor *)titleColorForState:(UIControlState)
//获得按钮的文字颜色
- (UIImage *)imageForState:(UIControlState)
//获得按钮内部的小图片
- (UIImage *)bagroundImageForState:(UIControlState)
//获得按钮的背景图片
4. UIButton基本使用步骤
1. 直接通过 storyboard 创建
注意:自定义按钮type自动改成custom类型
2. 拖线链接引用 UIButton 控件
3. 设置相关属性
1. 通过代码创建按钮的同时指定按钮样式
2. 设置相关属性
5. UIButton的代码创建与常用属性设置
// 1. 创建按钮
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIButton *button = [[UIButton alloc]init];// 和上面一行代码等价
注意:按钮创建好之后,按钮的类型是不可以被修改
button.buttonType = UIButtonTypeC // 错误写法,系统会报错
UIButtonTypeCustom:无类型,按钮的内容需要自定义:位置尺寸、背景色,等(如果没有自定义这些可能会看不到)
UIButtonTypeDetailDisclosure:
UIButtonTypeInfoLight:
UIButtonTypeInfoDark:
UIButtonTypeContactAdd:
设置位置尺寸、图片、背景图片、标题、标题颜色,等
// 2. 设置位置尺寸
button.frame = CGRectMake(100, 200, 200, 50);
// 3. 设置文字
// 3.1 常态的文字
[button setTitle:@"我是按钮" forState:UIControlStateNormal];
// 3.2 高亮状态的文字
[button setTitle:@"我是高亮按钮" forState:UIControlStateHighlighted];
// 4. 设置字体颜色
// 4.1 常态的字体颜色
[button setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
// 4.2 高亮状态的字体颜色
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
// 4. 设置图片
// 4.1 常态下的图片
[button setImage:[UIImage imageNamed:@"like"] forState:UIControlStateNormal];
// 4.2 高亮下的图片
[button setImage:[UIImage imageNamed:@"like_pressed"] forState:UIControlStateHighlighted];
// 5. 设置背景图片
// 5.1 常态下的背景图
[button setBackgroundImage:[UIImage imageNamed:@"buttongreen"] forState:UIControlStateNormal];
// 5.2 高亮下的背景图
[button setBackgroundImage:[UIImage imageNamed:@"buttongreen_hightlighted"] forState:UIControlStateHighlighted];
// 6. 设置按钮点击状态, 默认就是YES ,NO 状态是不可点击
button.enabled = YES;
// 7. 将按钮添加入控制器view中
[self.view addSubview:button];
监听按钮点击
只要按钮触发了UIControlEventTouchUpInside事件,就会调用self对象的buttonClick:方法
// 8. 监听按钮点击事件
//谁调用参数传的就是谁,这里button调用所以buttonClick:(参数){}传的就是button对象本身
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
- (void)buttonClick:(UIButton *)button{}
6. 重写按钮的某个状态属性的 setter 方法和 getter 方法设置按钮的状态
如: 重写按钮高亮get方法, 如果返回值是 yes , 则永远返回的是高亮状态, 如果返回值是 NO 则永远返回的是非高亮
- (BOOL)isHighlighted{
return NO;
重写按钮高亮 set 方法, 如果没有实现内部属性赋值(属性是父类定义的, 要调用父类的方法赋值), 则不会出现高亮状态
如果给内部属性赋值为 Yes , 则会一直为 YES状态, 如果赋值为 NO,
则一直未 NO 状态
- (void)setHighlighted:(BOOL)highlighted{
[super setHighlighted:highlighted];
7. 调整Button内部布局
实现步骤:
自定义按钮-&创建一个继承 UIButton 的子类(如:CDHButton)
给自定义按钮中的子控件重新布局(有两种方法)
方法一:要实现两个对象方法
-(CGRect)titleRectForContentRect:(CGRect)contentRect{
// 返回文字的frame
(CGRect)imageRectForContentRect:(CGRect)contentRect{
// 返回图片的frame
方法二:实现layoutSubViews方法
- (void)layoutSubviews{
[super layoutSubviews];
// 插入需要设置位置尺寸的语句,并返回frame
设置是否调整图片的显示亮度
// 设置在 Highlighted 状态点击时是否调整图片显示亮度
@property(nonatomic)
adjustsImageWhenH
// default is YES. if YES, image is drawn darker when highlighted(pressed)
// 设置在disabled状态是否调整图片显示亮度
@property(nonatomic)
adjustsImageWhenD
// default is YES. if YES, image is drawn lighter when disabled
// 在disabled要不要调整显示的图片,当disabled的时候也不改变背景色
self.adjustsImageWhenDisabled = NO;
按钮的内边距
设置内边距属性
// 按钮内的子控件(图片和文字)的内边距,
@property(nonatomic)
UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR; // default is UIEdgeInsetsZero
// 按钮内的子控件(文字)的内边距,
@property(nonatomic)
UIEdgeInsets titleEdgeI
// default is UIEdgeInsetsZero
// 按钮内的子控件(图片)的内边距,
@property(nonatomic)
UIEdgeInsets imageEdgeI
// default is UIEdgeInsetsZero
// 设置按钮内图片和文字内边距位置为(30,30),即是按钮内图片和文字一起右移30,下移30
self.btn.contentEdgeInsets = UIEdgeInsetsMake(30, 30, 0, 0);
// 设置按钮内文字内边距位置为(0,-30),即是按钮内文字上移30
self.btn.titleEdgeInsets = UIEdgeInsetsMake(0, -30, 0, 0);
// 设置按钮内图片内边距位置为(0,-30),即是按钮内图片上移30
self.btn.imageEdgeInsets = UIEdgeInsetsMake(0, -30, 0, 0);
延伸阅读:
(责任编辑:美朵)
每日重点推荐
夏医生是自己多年老同事的儿子,国外学成归来做事业,老同事担心儿子诊所刚开,门厅罗雀伤了自尊,便偷偷塞钱给李梅,求她装病去“捧场”。
一周热点文章
在线阅读专题本节知识点:
什么是UIButton
UIButton的状态
UIButton的属性设置
UIButton基本使用步骤
UIButton的代码创建与常用属性设置
重写按钮的某个状态属性的 setter 或 getter 方法设置按钮的状态
调整UIButton内部布局
1. 什么是UIButton
还有一个非常重要的UI控件---UIButton,俗称“按钮”
一般情况下,点击某个控件后,会做出相应反应的都是按钮
按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置
作用:监听用户的点击事件,在用户点击后做出响应
2. UIButton的状态
1. normal(普通状态)
默认情况(Default)
对应的枚举常量:UIControlStateNormal
除开UIControlStateHighlighted、UIControlStateDisabled、UIControlStateSelected以外的其他情况,都是normal状态
这种状态下的按钮【可以】接收点击事件
如果前后连着设置按钮同时处于多种状态, 则表现出来的也是 normal 状态, 除去如果有 设置为 enabled = NO; 则会进入UIControlStateDisabled状态(包括颜色), 不能点击
//下面两种杂交在一起(就不是 normal 后面三种 ), 会显示为 Normal 状态的颜色,
//但是 设置了 Enabled == NO,
所以这里也是不能点击的,
self.button.selected = YES;
self.button.enabled = NO;
2. highlighted(高亮状态)
对应的枚举常量:UIControlStateHighlighted
【当按住按钮不松开】或者【highlighted = YES】时就能达到这种状态
这种状态下的按钮【可以】接收点击事件
3.selected (选中状态)
对应的枚举常量: UIControlStateSelected
【button.selected = YES】时就能达到这种状态
这种状态下的按钮【可以】接收点击事件
4. disabled(失效状态,不可用状态)
如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
对应的枚举常量:UIControlStateDisabled
【button.enabled = NO】时就能达到这种状态
这种状态下的按钮【无法】接收点击事件
5. 让按钮无法点击的2种方法
button.enabled = NO;
【会】进入UIControlStateDisabled状态
button.userInteractionEnabled = NO;
【不会】进入UIControlStateDisabled状态,继续保持当前状态
3. UIButton的属性设置
设置按钮的背景图片
设置按钮在不同状态下的背景图片(为了保证高亮状态下的图片正常显示,必须设置按钮的type为custom)
按钮的样式type属性
实际上,UIButton自带了很多种不同的样式
+ 知识点:Detail Disclosure/info Light/info Dark长一样(iOS7以前不一样,扁平化以后都一样,残留的东西)
UIButton的常见属性设置方法
- (void)setTitle:(NSString *)title forState:(UIControlState)
//设置按钮的文字
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)
//设置按钮的文字颜色
- (void)setImage:(UIImage *)image forState:(UIControlState)
//设置按钮内部的小图片
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)
//设置按钮的背景图片
//设置按钮的文字字体(需要拿到按钮内部的label来设置)
btn.titleLabel.font = [UIFont systemFontOfSize:13];
- (NSString *)titleForState:(UIControlState)
//获得按钮的文字
- (UIColor *)titleColorForState:(UIControlState)
//获得按钮的文字颜色
- (UIImage *)imageForState:(UIControlState)
//获得按钮内部的小图片
- (UIImage *)backgroundImageForState:(UIControlState)
//获得按钮的背景图片
4. UIButton基本使用步骤
1. 直接通过 storyboard 创建
注意:自定义按钮type自动改成custom类型
2. 拖线链接引用 UIButton 控件
3. 设置相关属性
1. 通过代码创建按钮的同时指定按钮样式
2. 设置相关属性
5. UIButton的代码创建与常用属性设置
// 1. 创建按钮
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIButton *button = [[UIButton alloc]init];// 和上面一行代码等价
注意:按钮创建好之后,按钮的类型是不可以被修改
button.buttonType = UIButtonTypeC // 错误写法,系统会报错
UIButtonTypeCustom:无类型,按钮的内容需要自定义:位置尺寸、背景色,等(如果没有自定义这些可能会看不到)
UIButtonTypeDetailDisclosure:
UIButtonTypeInfoLight:
UIButtonTypeInfoDark:
UIButtonTypeContactAdd:
设置位置尺寸、图片、背景图片、标题、标题颜色,等
// 2. 设置位置尺寸
button.frame = CGRectMake(100, 200, 200, 50);
// 3. 设置文字
// 3.1 常态的文字
[button setTitle:@&我是按钮& forState:UIControlStateNormal];
// 3.2 高亮状态的文字
[button setTitle:@&我是高亮按钮& forState:UIControlStateHighlighted];
// 4. 设置字体颜色
// 4.1 常态的字体颜色
[button setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
// 4.2 高亮状态的字体颜色
[button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
// 4. 设置图片
// 4.1 常态下的图片
[button setImage:[UIImage imageNamed:@&like&] forState:UIControlStateNormal];
// 4.2 高亮下的图片
[button setImage:[UIImage imageNamed:@&like_pressed&] forState:UIControlStateHighlighted];
// 5. 设置背景图片
// 5.1 常态下的背景图
[button setBackgroundImage:[UIImage imageNamed:@&buttongreen&] forState:UIControlStateNormal];
// 5.2 高亮下的背景图
[button setBackgroundImage:[UIImage imageNamed:@&buttongreen_hightlighted&] forState:UIControlStateHighlighted];
// 6. 设置按钮点击状态, 默认就是YES ,NO 状态是不可点击
button.enabled = YES;
// 7. 将按钮添加入控制器view中
[self.view addSubview:button];
监听按钮点击
只要按钮触发了UIControlEventTouchUpInside事件,就会调用self对象的buttonClick:方法
// 8. 监听按钮点击事件
//谁调用参数传的就是谁,这里button调用所以buttonClick:(参数){}传的就是button对象本身
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
- (void)buttonClick:(UIButton *)button{}
6. 重写按钮的某个状态属性的 setter 方法和 getter 方法设置按钮的状态
如: 重写按钮高亮get方法, 如果返回值是 yes , 则永远返回的是高亮状态, 如果返回值是 NO 则永远返回的是非高亮
- (BOOL)isHighlighted{
return NO;
重写按钮高亮 set 方法, 如果没有实现内部属性赋值(属性是父类定义的, 要调用父类的方法赋值), 则不会出现高亮状态
如果给内部属性赋值为 Yes , 则会一直为 YES状态, 如果赋值为 NO, 则一直未 NO 状态
- (void)setHighlighted:(BOOL)highlighted{
[super setHighlighted:highlighted];
7. 调整Button内部布局
实现步骤:
自定义按钮-&创建一个继承 UIButton 的子类(如:CDHButton)
给自定义按钮中的子控件重新布局(有两种方法)
方法一:要实现两个对象方法
-(CGRect)titleRectForContentRect:(CGRect)contentRect{
// 返回文字的frame
(CGRect)imageRectForContentRect:(CGRect)contentRect{
// 返回图片的frame
方法二:实现layoutSubViews方法
- (void)layoutSubviews{
[super layoutSubviews];
// 插入需要设置位置尺寸的语句,并返回frame
设置是否调整图片的显示亮度
// 设置在 Highlighted 状态点击时是否调整图片显示亮度
@property(nonatomic)
adjustsImageWhenH
// default is YES. if YES, image is drawn darker when highlighted(pressed)
// 设置在disabled状态是否调整图片显示亮度
@property(nonatomic)
adjustsImageWhenD
// default is YES. if YES, image is drawn lighter when disabled
// 在disabled要不要调整显示的图片,当disabled的时候也不改变背景色
self.adjustsImageWhenDisabled = NO;
按钮的内边距
设置内边距属性
// 按钮内的子控件(图片和文字)的内边距,
@property(nonatomic)
UIEdgeInsets contentEdgeInsets UI_APPEARANCE_SELECTOR; // default is UIEdgeInsetsZero
// 按钮内的子控件(文字)的内边距,
@property(nonatomic)
UIEdgeInsets titleEdgeI
// default is UIEdgeInsetsZero
// 按钮内的子控件(图片)的内边距,
@property(nonatomic)
UIEdgeInsets imageEdgeI
// default is UIEdgeInsetsZero
// 设置按钮内图片和文字内边距位置为(30,30),即是按钮内图片和文字一起右移30,下移30
self.btn.contentEdgeInsets = UIEdgeInsetsMake(30, 30, 0, 0);
// 设置按钮内文字内边距位置为(0,-30),即是按钮内文字上移30
self.btn.titleEdgeInsets = UIEdgeInsetsMake(0, -30, 0, 0);
// 设置按钮内图片内边距位置为(0,-30),即是按钮内图片上移30
self.btn.imageEdgeInsets = UIEdgeInsetsMake(0, -30, 0, 0);
阅读(...) 评论()

我要回帖

更多关于 qt水平布局控件大小 的文章

 

随机推荐