UIButton 的一些属性
2015-11-30 21:09
543 查看
暂时没什么时间自己写 都是剪切复制过来的 如果不小心被原作者看到 请原谅则个 我只是个新手 想学点知识 还怕收藏里的网站太多 找不到 所以就COPY到这里了 谢谢前辈大神们 !!!
一
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Cerulean
链接:http://www.zhihu.com/question/25284619/answer/30370393
来源:知乎
.先说这段是什么意思:
假设UIControlState枚举类型的状态位是8位(其实是32位或者64位)便于解释
那么UIControlStateNormal就是8个0,StateHighlighted就是0000 0001,左移0位。
这说明Normal状态和Highlighted状态做或运算后是不能叠加的。
同理StateDisabled和StateSelected是1左移1位和2位,分别就是0000 0010和0000 0100
这说明Disabled和Selected与Normal或Highlighted这三个状态做或(|)运算是可以叠加的。
比如:<img src="https://pic2.zhimg.com/fd2ef3cf467febb90ec309d20ba3a871_b.jpg" data-rawwidth="186" data-rawheight="74" class="content_image" width="186">
<img
src="https://pic4.zhimg.com/abf49b1918137c877d57e0ed816d7a77_b.jpg" data-rawwidth="190" data-rawheight="78" class="content_image" width="190">
第一个图为enabled + selected,第二个图为disabled + selected
2.再说区别:
要说区别,一般指的也就是状态变化上有时序的区别了,@Jimmy Zhang 前辈已经描述的很完整了。
一般如果是由Touch Up Inside触发的事件:
手指按到控件,UIControl更新ControlState到Highlighted
手指离开控件,一般UIControl更新ControlState到Selected
Highlighted -> Selected之后的状态取决于具体的UIControl子类,其实连UITableViewCell也有这三种状态,Cell还是UIView的子类,这种特殊的状态默认就不会更新回Normal了~
3.然后这两个状态是否可以混用?
个人觉得知道了区别和时序之后应该是按时序择需使用,但是对应于某些特殊控件比如TableViewCell,因为不会更新状态到Normal,所以反而在这个时候Highlight和Selected的区别就不是那么明显了。
4.至于在UIbutton中,那就是非常自然的时序:Normal -> Highlighted -> Selected -> Normal啦。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。(非商业 只为学习 出处也标出了!!)
作者:薛雪峰
链接:http://www.zhihu.com/question/25284619/answer/30411421
来源:知乎
这两个state平时是否可以混用?
基本不可混用,原因看最后一个问题的回答。
有没有这两个state需要严格区分开来使用的时候?
有。
想象这样一个需求:你需要做一个 checkbox,当用户选择时需要打勾,再点击时取消打勾。
两个思路:
为 button 的 UIControlStateNormal 状态和 UIControlStateSelected 状态设置不同的图片,在相关的方法中设置 button 的 selected 属性。
为 button 的 UIControlStateNormal 状态和 UIControlStateHighlighted 状态设置不同的图片,在相关的方法中设置 button 的 highlighted 属性。
正确的解决办法是思路 1,因为 UIControlStateHighlighted 是一个非持久状态,当你设置了 button.highlighted = YES 后, 再随便点击一下 button,此时 button 就会变回 UIControlStateNormal 状态了。
尤其是在UIButton的状态设置中,这两个状态又有什么区别呢?
它们作用不同,UIControlStateSelected 是一个持久的状态,当取消点击后可以继续持续下去。而 UIControlStateHighlighted 是一个瞬间(非持久)的状态,只有当点击时才处于的状态。
通常 UIControlStateHighlighted 多用于初始化 button 时设置它被按下时的高亮图片或背景(松开就变为 UIControlStateNormal 状态下的外观),而 UIControlStateSelected 多用于被按下后需要持续不变的外观而又区别与 UIControlStateNormal 外观的情况(需要设置 button.selected = YES)以及其他一些事件的处理。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Jimmy Zhang
链接:http://www.zhihu.com/question/25284619/answer/30367528
来源:知乎
Highligted 和 Selected 是不同的状态,是不可以混用的
这些 UIControlState 是针对所有的 UIControl 定义的,但是实际上不是每个 UIControl 都会经历到这些个 State
基本的 State 变化过程如下
1.什么都没干的时候:Normal
2.当你的手指按下去,还没放的时候:Highlighted
3.当手指放开的时候:如果这个 UIControl 有 Selected 状态的话,就会变成: Selected
再重复上述过程一次,就会从 Selected->Highlighted-> Normal
但是普通的 UIButton 这个 UIControl 的 subclass,是没有 Selected 状态的,它就只有 Normal 和 Highlighted,只会在这两个状态间切换。(正常情况下,如果你设置了 disable 的话,还会变到 Disabled)
二
转载自:http://blog.csdn.net/clwahaha/article/details/10006797
方法1:
[UIButton enabled]函数,此方法在ButtonType为自定义的时候,会影响按钮的外观,所以不推荐使用
方法2:
[UIButton userInteractionEnabled],不会影响,推荐使用
三
UIButton按钮是IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用。
第一、UIButton的定义
UIButton *button=[[UIButton buttonWithType:(UIButtonType);
能够定义的button类型有以下6种,
typedef enum {
UIButtonTypeCustom = 0, 自定义风格
UIButtonTypeRoundedRect, 圆角矩形
UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用
UIButtonTypeInfoLight, 亮色感叹号
UIButtonTypeInfoDark, 暗色感叹号
UIButtonTypeContactAdd, 十字加号按钮
} UIButtonType;
第二、设置frame
button1.frame = CGRectMake(20, 20, 280, 40);
[button setFrame:CGRectMake(20,20,50,50)];
第三、button背景色
button1.backgroundColor = [UIColor clearColor];
[button setBackgroundColor:[UIColor blueColor]];
第四、state状态
forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现
enum {
UIControlStateNormal = 0, 常规状态显现
UIControlStateHighlighted = 1 << 0, 高亮状态显现
UIControlStateDisabled = 1 << 1, 禁用的状态才会显现
UIControlStateSelected = 1 << 2, 选中状态
UIControlStateApplication = 0x00FF0000, 当应用程序标志时
UIControlStateReserved = 0xFF000000 为内部框架预留,可以不管
};
@property(nonatomic,getter=isEnabled)BOOL enabled; // default is YES. if NO, ignores touch events and subclasses may draw differently
@property(nonatomic,getter=isSelected)BOOL selected; // default is NO may be used by some subclasses or by application
@property(nonatomic,getter=isHighlighted)BOOL highlighted;
第五 、设置button填充图片和背景图片
[buttonsetImage:[UIImageimageNamed:@"checkmarkControllerIcon"]forState:UIControlStateNormal];
[buttonsetBackgroundImage:[UIImageimageNamed:@"checkmarkControllerIcon"]forState:UIControlStateNormal];
第六、设置button标题和标题颜色
[button1 setTitle:@"点击" forState:UIControlStateNormal];
[buttonsetTitleColor:[UIColorredColor]forState:UIControlStateNormal];
第七、设置按钮按下会发光
button.showsTouchWhenHighlighted=NO;
第八、添加或删除事件处理
[button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];
[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
第九、 设置按钮内部图片间距和标题间距
UIEdgeInsets insets; // 设置按钮内部图片间距
insets.top = insets.bottom = insets.right = insets.left = 10;
bt.contentEdgeInsets = insets;
bt.titleEdgeInsets = insets; // 标题间距
一
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Cerulean
链接:http://www.zhihu.com/question/25284619/answer/30370393
来源:知乎
.先说这段是什么意思:
enum { UIControlStateNormal = 0, UIControlStateHighlighted = 1 << 0, UIControlStateDisabled = 1 << 1, UIControlStateSelected = 1 << 2, UIControlStateApplication = 0x00FF0000, UIControlStateReserved = 0xFF000000 };
假设UIControlState枚举类型的状态位是8位(其实是32位或者64位)便于解释
那么UIControlStateNormal就是8个0,StateHighlighted就是0000 0001,左移0位。
这说明Normal状态和Highlighted状态做或运算后是不能叠加的。
同理StateDisabled和StateSelected是1左移1位和2位,分别就是0000 0010和0000 0100
这说明Disabled和Selected与Normal或Highlighted这三个状态做或(|)运算是可以叠加的。
比如:<img src="https://pic2.zhimg.com/fd2ef3cf467febb90ec309d20ba3a871_b.jpg" data-rawwidth="186" data-rawheight="74" class="content_image" width="186">
<img
src="https://pic4.zhimg.com/abf49b1918137c877d57e0ed816d7a77_b.jpg" data-rawwidth="190" data-rawheight="78" class="content_image" width="190">
第一个图为enabled + selected,第二个图为disabled + selected
2.再说区别:
要说区别,一般指的也就是状态变化上有时序的区别了,@Jimmy Zhang 前辈已经描述的很完整了。
一般如果是由Touch Up Inside触发的事件:
手指按到控件,UIControl更新ControlState到Highlighted
手指离开控件,一般UIControl更新ControlState到Selected
Highlighted -> Selected之后的状态取决于具体的UIControl子类,其实连UITableViewCell也有这三种状态,Cell还是UIView的子类,这种特殊的状态默认就不会更新回Normal了~
3.然后这两个状态是否可以混用?
个人觉得知道了区别和时序之后应该是按时序择需使用,但是对应于某些特殊控件比如TableViewCell,因为不会更新状态到Normal,所以反而在这个时候Highlight和Selected的区别就不是那么明显了。
4.至于在UIbutton中,那就是非常自然的时序:Normal -> Highlighted -> Selected -> Normal啦。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。(非商业 只为学习 出处也标出了!!)
作者:薛雪峰
链接:http://www.zhihu.com/question/25284619/answer/30411421
来源:知乎
这两个state平时是否可以混用?
基本不可混用,原因看最后一个问题的回答。
有没有这两个state需要严格区分开来使用的时候?
有。
想象这样一个需求:你需要做一个 checkbox,当用户选择时需要打勾,再点击时取消打勾。
两个思路:
为 button 的 UIControlStateNormal 状态和 UIControlStateSelected 状态设置不同的图片,在相关的方法中设置 button 的 selected 属性。
为 button 的 UIControlStateNormal 状态和 UIControlStateHighlighted 状态设置不同的图片,在相关的方法中设置 button 的 highlighted 属性。
正确的解决办法是思路 1,因为 UIControlStateHighlighted 是一个非持久状态,当你设置了 button.highlighted = YES 后, 再随便点击一下 button,此时 button 就会变回 UIControlStateNormal 状态了。
尤其是在UIButton的状态设置中,这两个状态又有什么区别呢?
它们作用不同,UIControlStateSelected 是一个持久的状态,当取消点击后可以继续持续下去。而 UIControlStateHighlighted 是一个瞬间(非持久)的状态,只有当点击时才处于的状态。
通常 UIControlStateHighlighted 多用于初始化 button 时设置它被按下时的高亮图片或背景(松开就变为 UIControlStateNormal 状态下的外观),而 UIControlStateSelected 多用于被按下后需要持续不变的外观而又区别与 UIControlStateNormal 外观的情况(需要设置 button.selected = YES)以及其他一些事件的处理。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Jimmy Zhang
链接:http://www.zhihu.com/question/25284619/answer/30367528
来源:知乎
Highligted 和 Selected 是不同的状态,是不可以混用的
这些 UIControlState 是针对所有的 UIControl 定义的,但是实际上不是每个 UIControl 都会经历到这些个 State
基本的 State 变化过程如下
1.什么都没干的时候:Normal
2.当你的手指按下去,还没放的时候:Highlighted
3.当手指放开的时候:如果这个 UIControl 有 Selected 状态的话,就会变成: Selected
再重复上述过程一次,就会从 Selected->Highlighted-> Normal
但是普通的 UIButton 这个 UIControl 的 subclass,是没有 Selected 状态的,它就只有 Normal 和 Highlighted,只会在这两个状态间切换。(正常情况下,如果你设置了 disable 的话,还会变到 Disabled)
二
转载自:http://blog.csdn.net/clwahaha/article/details/10006797
方法1:
[UIButton enabled]函数,此方法在ButtonType为自定义的时候,会影响按钮的外观,所以不推荐使用
方法2:
[UIButton userInteractionEnabled],不会影响,推荐使用
三
UIButton按钮是IOS开发中最常用的控件,作为IOS基础学习教程知识 ,初学者需要了解其基本定义和常用设置,以便在开发在熟练运用。
第一、UIButton的定义
UIButton *button=[[UIButton buttonWithType:(UIButtonType);
能够定义的button类型有以下6种,
typedef enum {
UIButtonTypeCustom = 0, 自定义风格
UIButtonTypeRoundedRect, 圆角矩形
UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用
UIButtonTypeInfoLight, 亮色感叹号
UIButtonTypeInfoDark, 暗色感叹号
UIButtonTypeContactAdd, 十字加号按钮
} UIButtonType;
第二、设置frame
button1.frame = CGRectMake(20, 20, 280, 40);
[button setFrame:CGRectMake(20,20,50,50)];
第三、button背景色
button1.backgroundColor = [UIColor clearColor];
[button setBackgroundColor:[UIColor blueColor]];
第四、state状态
forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现
enum {
UIControlStateNormal = 0, 常规状态显现
UIControlStateHighlighted = 1 << 0, 高亮状态显现
UIControlStateDisabled = 1 << 1, 禁用的状态才会显现
UIControlStateSelected = 1 << 2, 选中状态
UIControlStateApplication = 0x00FF0000, 当应用程序标志时
UIControlStateReserved = 0xFF000000 为内部框架预留,可以不管
};
@property(nonatomic,getter=isEnabled)BOOL enabled; // default is YES. if NO, ignores touch events and subclasses may draw differently
@property(nonatomic,getter=isSelected)BOOL selected; // default is NO may be used by some subclasses or by application
@property(nonatomic,getter=isHighlighted)BOOL highlighted;
第五 、设置button填充图片和背景图片
[buttonsetImage:[UIImageimageNamed:@"checkmarkControllerIcon"]forState:UIControlStateNormal];
[buttonsetBackgroundImage:[UIImageimageNamed:@"checkmarkControllerIcon"]forState:UIControlStateNormal];
第六、设置button标题和标题颜色
[button1 setTitle:@"点击" forState:UIControlStateNormal];
[buttonsetTitleColor:[UIColorredColor]forState:UIControlStateNormal];
第七、设置按钮按下会发光
button.showsTouchWhenHighlighted=NO;
第八、添加或删除事件处理
[button1 addTarget:self action:@selector(butClick:) forControlEvents:UIControlEventTouchUpInside];
[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
第九、 设置按钮内部图片间距和标题间距
UIEdgeInsets insets; // 设置按钮内部图片间距
insets.top = insets.bottom = insets.right = insets.left = 10;
bt.contentEdgeInsets = insets;
bt.titleEdgeInsets = insets; // 标题间距
相关文章推荐
- 奇怪的现象:touchesBegan: 与UITapGestureRecognizer手势没有人响应 以及set方法的妙用
- 在Visual Studio中使用VueJS时,不可以用 v-bind 的简写 : 及 v-on的简写 @
- UI第十四天:UI⾼级可视化设计
- c#子线程操作ui
- 让IE8支持@media query
- UITableView
- 《算法竞赛入门经典2ndEdition 》例题3-6 环状序列(Circular Sequence, Uva1584)
- C# 使用msbuild编译程序
- scala剖析PriorityQueue,权值的使用
- 安装UIIamge拾取图片插件
- 【Win10开发】绘制静态UI
- UI-1-UI入门
- MyEclips启动报错:'Building workspace' has encountered a problem的解决方法
- UI基础-UI高级 可视化设计
- layout_centerVertical="true"用法
- 35.UITabBarController(标签视图控制器)
- 大鱼吃小鱼游戏-fruit.js
- XCTest/XCTest.h not found on old projects built in Xcode
- UI基础
- IOS之--UI进阶--多控制器管理第一天