UIButton / UIControl

一、初始化
    UIButton *button = [ UIButton buttonWithType : UIButtonTypeCustom ];
    [ self . view addSubview :button];   // 添加到视图
  •     UIButtonTypeCustom  -  自定义风格(按钮的默认颜色是白色)
  •   UIButtonTypeSystem  -  系统默认样式(默认颜色为蓝色)
二、设置button 属性
(1)设置button的位置(frame)
    button. frame = CGRectMake (2 0 , 20 , 5 0 , 5 0 );
(2)设置button背景
1、背景色
  • 写法一:
    button. backgroundColor = [ UIColor clearColor ];
  • 写法二:
    [button setBackgroundColor :[ UIColor blueColor ]];
2、设置图片
  • 填充图片:
    [button setImage :[ UIImage imageNamed : @"6.jpeg" ] forState : UIControlStateNormal ];
  • 背景图片:
    [button setBackgroundImage :[ UIImage imageNamed : @"6.jpeg" ] forState : UIControlStateNormal ];
状态(State)
  •     UIControlStateNormal          —  常规状态显现
  •     UIControlStateHighlighted   —  高亮状态显现            
  •     UIControlStateDisabled        —  禁用的状态才会显现
  •     UIControlStateSelected        —  选中状态  
  •     UIControlStateApplication   —  当应用程序标志是
  •     UIControlStateReserved       —  为内部框架预留,可以不用管
(3)设置按钮按下时会发光
    button. showsTouchWhenHighlighted = YES ;
(4)添加圆角操作
    button. layer . cornerRadius = CGRectGetWidth (button. frame )/ 2 ; // 获取按钮的宽 /2
    button. layer . masksToBounds = YES ; // 切掉圆角
(5)添加边框
    button. layer . borderWidth = 1 ;
    button. layer . borderColor = [ UIColor lightGrayColor ]. CGColor ; // 获取图层颜色
(6)唯一数字标识符
    button. tag = 100 ;
(7)是否可用(禁用)
    button. showsTouchWhenHighlighted = YES ;
(8)adjustsImageWhenHighlighted   -  设置当按钮高亮时图片是否改变,为真时图片随按钮高亮而高亮
(9)adjustsImageWhenDisabled   -  设置当按钮高亮时图片是否改变,为真时图片随按钮失效而变暗
(10)顶部 / 底层
    [ self . view bringSubviewToFront :button]; // 放到最上层
    [ self . view sendSubviewToBack :button]; // 最底层
三、设置button的内部
(1)设置按钮的标题
1、设置标题
    [button setTitle : @"确定" forState : UIControlStateNormal ];
2、设置标题的颜色
    [button setTitleColor :[ UIColor  blackColor ] forState : UIControlStateNormal ];
3 、设置标题的字体
    button. titleLabel . font =  [ UIFont systemFontOfSize : 24 ];
(说明 : 按钮中为了显示文本 , 包含了一个标签)
(2)设置按钮内部图片间距和标题间距
    UIEdgeInsets insets; // 设置按钮内部图片间距
    insets. top = insets. bottom = insets. right = insets. left = 10;
    button. contentEdgeInsets = insets; // 内容间距
    button. titleEdgeInsets = insets; // 标题间距
    button. imageEdgeInsets = insets; // 图像 间距
(3)button上的子控件的对齐方式
1、 水平 对齐方式
    button. contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
2、 垂直对齐方式
    button. contentVerticalAlignment = UIControlContentVerticalAlignmentTop ;
(4)设置图片的显示方式
    button. clipsToBounds = YES ;     // 超出边界的地方被隐藏
    button. imageView . contentMode = UIViewContentModeScaleAspectFit
  •     UIViewContentModeScaleToFill    -   根据视图的比例去拉伸图片内容
  •     UIViewContentModeScaleAspectFit    -  保持图片内容的纵横比例,来适应视图的大小
  •     UIViewContentModeScaleAspectFill    -  用图片内容来填充视图的大小,多余的部分可以被修剪掉来填充整个视图边界
  •     UIViewContentModeRedraw    -  单视图的尺寸位置发生变化时,通过调用setNeedsDisplay方法来重新显示
(以下都是保持图片的原比例在视图中显示图片内容,只是显示位置不一样。如果视图大小 小于 图片的尺寸,则图片会超出视图边界)
  •     UIViewContentModeCenter    -  在视图中间显示
  •     UIViewContentModeTop    - 中间顶部
  •     UIViewContentModeBottom    -  中间底部
  •     UIViewContentModeLeft    -  中间左边
  •     UIViewContentModeRight    -  中间右边
  •     UIViewContentModeTopLeft    -  在视图左上角显示
  •     UIViewContentModeTopRight    -  右上角
  •     UIViewContentModeBottomLeft    -  左下角
  •     UIViewContentModeBottomRight    -  右下角
注意以上几个常量,凡是没有带Scale的,当图片尺寸超过ImageView尺寸时,只有部分显示在ImageView中。UIViewContentModeScaleToFill属性会导致图片变形。
UIViewContentModeScaleAspectFit会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白。
UIViewContentModeScaleAspectFill也会证图片比例不变,但是是填充整个ImageView的,可能只有部分图片显示出来。

当button的样式是UIButtonTypeSystem样式的时候,可以设置图片的渲染
(5)偏移
    button. contentEdgeInsets = UIEdgeInsetsMake ( 0 , 20 , 0 , 0 );

接下来是UIControl对象

UIControl是UIView的子类,当然也是UIResponder的子类。UIControl是诸如UIButton、UISwitch、UITextField等控件的父类,它本身也包含了一些属性和方法,但是不能直接使用UIControl类,它只是定义了子类都需要使用的方法。

UIControl对象采用了一种新的事件处理机制,将前一节直接处理的触摸事件转换成简单操作,这样可以无需关心用户访问控件的具体方式。触摸事件到达UIControl对象(由响应者链派遣)后,在UIResponder的方法中(如touchBegan:withEvent)中,UIControl将标准的触摸事件转换为特殊的控件事件,简单的理解就是,UIControl把复杂的触摸事件封装成了简单的易于使用的控件事件。例如通过UIControl对象处理后,按下按钮的事件就被封装成一个控件事件,而不用去判断触摸屏幕的整个操作过程。

例如按钮的单击事件:UIControlEventTouchUpInside

 

我们所需要知道的是UIControl首先将触摸事件转换为控件事件,再转换为带接收放的操作。我们只要编写第二次转换的代码,就是将控件事件转换为有目标的操作。

 

使用addTarget:action:forControlEvents

这是UIControl的一个方法,为指定的控件对象添加事件,例如:

[controlObj addTarget:recepientObj action @selector(method) froControlEvents : UIControlEvents];

controlObj是要响应事件的控件对象;

参数receientObj是要把消息发送到哪里,一般是self,通常指实例化控件对象的控制器;

action后面是一个选择器,表示该事件需要响应的方法,事件做什么其实就写在这个方法里面;

最后一个是事件类型,表示响应什么样的事件。

 

使用的两种方式:

1.通过代码

在代码中新建一个按钮,然后为按钮对象添加addTarget:action:forControlEvents方法,然后编写响应方法即可。

 

2.通过可视化实现

在IB中按住control键,点击鼠标从按钮拖动到对应的.h文件中,就建立了一个IBAction方法,在此方法中编写事件逻辑便可完成事件响应,用这种方法相比第一种来说更直观,开发效率也更高。



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值