UIButton


UIbutton属性

  • 边框

     //  设置边框颜色
     infoErrorButton.layer.borderWidth = 1.0;
     infoErrorButton.layer.borderColor = [UIColor cyanColor].CGColor; //  两个都要
    
     //  变成圆形
     self.button.layer.cornerRadius = buttonW/2.0-2.5;
     self.button.layer.masksToBounds = YES; // 两个都要
    
     //  titleLabel排版位置(指的是label控件而不是label的内容)
     topButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
                                            UIControlContentHorizontalAlignmentCenter = 0,
                                            UIControlContentHorizontalAlignmentLeft   = 1,
                                            UIControlContentHorizontalAlignmentRight  = 2,
                                            UIControlContentHorizontalAlignmentFill
     topButton.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);(靠左20个像素,不会紧靠边框)
    
     //  已有颜色改变透明度(white可以看的)
     [UIColor alloc] initWithWhite:0.5 alpha:0.4].CGColor;
    

  • sizeToFit 自动更改边框大小
     [button sizeToFit]
    

    UIButton取消点击效果

    //  注意type要设置为custom
    button.adjustsImageWhenHighlighted = NO;
    

UIButton改变本身的label和imageView的frame

  • UIButton内部改动

    • 返回位置
        //  返回imageView的位置
    - (CGRect)imageRectForContentRect:(CGRect)contentRect {
    
          return CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
    }
          //   返回title的位置
    - (CGRect)titleRectForContentRect:(CGRect)contentRect {
    
          return CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
    }
    
    • 布局子控件layoutSubviews(self.frame一改动,就会调用这个方法)
    - (void)layoutSubviews {
       //  这个很重要
        [super layoutSubviews];
    
        //  可以利用self.bounds来对label和imageView进行设置frame
       //   titleLabel的位置
        self.titleLabel.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>);
       //   imageView的位置
        self.imageView.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>);
    }
    
  • UIButton实例对象直接改动
//  titleLabel
 [btn setTitleEdgeInsets:UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right); //  距离四周的距离
//  imageView,这代码有的时候可能看起来没效果,可能是因为图片太小,当edge比较小时,图片就自动缩小,这样要计算整个按钮-图片大小来计算edge,这样的话titleLabel与imageView之间可能不会紧凑这个问题没办法处理,直接换张设置刚好的大小计算好放在3X就好
 [btn setImageEdgeInsets:UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right); //  距离四周的距离
//  titleLabel和imageView作为整体
     //  按钮所有内容左对齐
backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
                                      //   中间
                                        UIControlContentHorizontalAlignmentCenter = 0,
                                      //   左
                                        UIControlContentHorizontalAlignmentLeft   = 1,
                                     //   右
                                        UIControlContentHorizontalAlignmentRight  = 2,
                                     //  填满
                                        UIControlContentHorizontalAlignmentFill   = 3,
  • UIButton里面的图片设置

UIButton样式

UIButton *button = [UIButton alloc] initWithType:(UIButtonType)];
  • UIButtonType
    1、UIButtonTypeDetailDisclosure
    2、UIButtonTypeInfoLight
    3、 UIButtonTypeInfoDark

    以上三种类型图标相同,width和height在>0 && >= 20,
    图标会随着数值大小变化,当为20(图3);如果width和height不同,会变形
    (图2),>20图标不变,但是范围变大(图1)

    4、 UIButtonTypeContactAdd,

    5、 UIButtonTypeRoundedRect = UIButtonTypeSystem(default),系统默认样式 6、UIButtonTypeCustom 自定义样式

图1: 图2:

图3:


UIButton状态(常用四种状态)

  • 设置属性

    [btn setTitleColor:  forState:(UIControlState)  ];
                                 1.ControlStateNormal  //  正常状态,即按钮没被点击的时候
                                 2.ControlStateHightlight  //  高亮状态,即按钮被点没有放开的时候
                                 3.ControlStateDisabled  //  不可使用的状态,即按钮变灰的时候
                                 4.ControlStateSelected  //  可选择,就像音乐播放器的播放开关若可选择状态(btn.selected = YES)即一个按钮可触发两个事件,
    
    • ControlStateSelected(可用于开关之类)

          - (void)click:(UIButton *)btn
          {
             if([btn isSelected])
                {
                   ....
                   ....
                   ....
                   btn.selected = NO;  // 设置为NO,下次传进来才能触发另外一个事件
                }
      
                else  //  btn.selected == NO
                {
                   ....
                   ....
                   ....
                   btn.selected = YES;
                }
            }
            //  两个状态进行交换,
            //  点一下,.selected = YES,触发一种事件;
            //  再点一下,.selected = NO,触发另外一种事件
      
  • button里面titleLabel和imagView作为整体挪动

     //  按钮所有内容左对齐
    backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
       //  中间
    UIControlContentHorizontalAlignmentCenter = 0,
       //   左
    UIControlContentHorizontalAlignmentLeft   = 1,
       //  右
    UIControlContentHorizontalAlignmentRight  = 2,
       //  填满
    UIControlContentHorizontalAlignmentFill   = 3,

button关联,取消点击事件(有不同的触发手势喔~,不同情况下要使用不同触发手势喔,不然会......,造成控件点击,显示不了效果)

继承UIControl的控件都能触发事件
一个控件可关联多个事件(不推荐),也可多个控件关联同一个事件

  • 在控件区,直接拖拽生成控件

    • 关联事件(成功的话,代码左边有实心黑点)

      1、 control + 点击控件拖线到代码区; 2、填写内容

    • 取消事件

      1、 右击控件区控件,删除连线(实心黑点变成空心点点) 2、 删除代码区代码

  • 在代码区

    • 关联事件(代码如下:)

        //  我是代码= -- =
          [btn addTarget:(nullable id)self action:(nonnull SEL)@selector(方法名(有参数请不要漏掉这个 : ))
          forControlEvents:(UIControlEvents)];
                         1.UIControlEventTouchUpInside ;   // 点下去放开的时候触发
                         2.UIControlEventTouchInside;      //  点击下去,控件的范围之内放开的时候触发
                         3.UIControlEventTouchDown;        //  点击下去,还没放开的时候触发
                         4.UIControlEventDownReat;         //  连续两次点击,第二次点击还没放开的时候触发
                         5.UIControlEventTouchDragInside;  //  点击下去不放开,在控件范围内移一下,触发一次;移多下,触发多次
                         6.UIControlEventDrayOutside;      //  点击下去不放开,在控件范围外移一下,触发一次;移多下,触发多次
      
    • 取消事件

      1、直接删除关联代码就ok


results matching ""

    No results matching ""