UIButton 的一些属性

来源:互联网 发布:usb3.0端口 编辑:程序博客网 时间:2024/05/01 05:51

暂时没什么时间自己写 都是剪切复制过来的 如果不小心被原作者看到  请原谅则个  我只是个新手 想学点知识  还怕收藏里的网站太多 找不到  所以就COPY到这里了  谢谢前辈大神们 !!!


著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者: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这三个状态做或(|)运算是可以叠加的。
比如:&amp;lt;img src=&quot;https://pic2.zhimg.com/fd2ef3cf467febb90ec309d20ba3a871_b.jpg&quot; data-rawwidth=&quot;186&quot; data-rawheight=&quot;74&quot; class=&quot;content_image&quot; width=&quot;186&quot;&amp;gt;&amp;lt;img src=&quot;https://pic4.zhimg.com/abf49b1918137c877d57e0ed816d7a77_b.jpg&quot; data-rawwidth=&quot;190&quot; data-rawheight=&quot;78&quot; class=&quot;content_image&quot; width=&quot;190&quot;&amp;gt;
第一个图为enabled + selected,第二个图为disabled + selected

2.再说区别:
要说区别,一般指的也就是状态变化上有时序的区别了,@Jimmy Zhang 前辈已经描述的很完整了。
一般如果是由Touch Up Inside触发的事件:
  1. 手指按到控件,UIControl更新ControlState到Highlighted
  2. 手指离开控件,一般UIControl更新ControlState到Selected
  3. 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,当用户选择时需要打勾,再点击时取消打勾。
两个思路:
  1. 为 button 的 UIControlStateNormal 状态和 UIControlStateSelected 状态设置不同的图片,在相关的方法中设置 button 的 selected 属性。
  2. 为 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; // 标题间距




0 0
原创粉丝点击