UIButton - 按钮

UIButton - 按钮

继承关系

  • NSObject ->UIResponder -> UIView ->UIControl -> UIButton

概述

UIButton允许用户以点击或特定手势的方式与之交互,按钮包含一个文本、一个图像,或包含两者,可以定制它的外观。
image

初始化

  • 直接创建按钮,并设置宽高


    let btn = UIButton(frame: CGRect(x: 100, y: 300, width: 90, height: 30))

  • 快捷创建按钮,默认为(0,0,0,0),需要设置它的frame

    btn = UIButton(type: UIButtonType.ContactAdd)
    //设置位置及大小
    btn.frame = CGRect(x: 100, y: 400, width: 90, height: 30)

设置按钮风格颜色

对按钮图标(针对系统自带风格图标有效)及按钮文字着色。

btn.tintColor = UIColor.redColor()

这里写图片描述

添加/删除事件

由于UIButton继承自UIControl,故可以通过方法addTarget:action:forControlEvents:为点击等特定行为添加处理事件。

处理方法,参数可以有一个、两个、或没有。

//添加处理事件,方法带两个参数
btn.addTarget(self, action: #selector(clickHandler(_:forEvent:)), forControlEvents: UIControlEvents.TouchUpInside)

1. func clickHandler(sender: UIButton,  forEvent event: UIEvent) {

        print("两个参数写法")
}

2. func clickHandler(sender: UIButton) {

        print(" 一个参数")
 }

3. func clickHandler() { 
        print(" 无参数") 
} 

移除事件

btn.removeTarget(self, action: #selector(clickHandler(_:forEvent:)), forControlEvents: UIControlEvents.TouchUpInside)

按钮的状态

struct UIControlState : OptionSetType {
 init(rawValue rawValue: UInt) 
 static var Normal: UIControlState { get } //常规状态显现
 static var Highlighted: UIControlState { get }// 高亮状态显现
 static var Disabled: UIControlState { get } //禁用的状态才会显现
 static var Selected: UIControlState { get }//选中状态
 static var Focused: UIControlState { get }//焦点状态
 static var Application: UIControlState { get } //当应用程序标志时
 static var Reserved: UIControlState { get } //为内部框架预留
}

设置按钮样式

UIButton通过设置buttonType确定显示带内容。

let button = UIButton(type: UIButtonType.Custom)
参数type为枚举类型,定义如下

enum UIButtonType : Int 
{
  case Custom    //自定义风格
  case System    //系统默认样式
  case DetailDisclosure //感叹号按钮,主要做详细说明用
  case InfoLight  //亮色感叹号
  case InfoDark   // 暗色感叹号
  case ContactAdd  //十字加号
  static var RoundedRect: UIButtonType { get } //圆角矩形, ios7.0以后不再用,用System 代替
}

设置标题/标题颜色

//设置标题
btn.setTitle("联系人", forState:UIControlState.Normal)
//设置标题颜色
btn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)

//可通过`titleLabel`属性设置字体的样式
btn.titleLabel?.font = UIFont.systemFontOfSize(14)
btn.titleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail

//注意:在这设置标题无效
 btn.titleLabel?.text = "niwon"

注意:如果按钮样式为.DetailDisclosure.InfoLight.InfoDark.ContactAdd,那么属性 titleLabelnil

设置按钮图标

//设置图标图片
btn.setImage(UIImage(named: "icon"), forState: UIControlState.Normal)

//可通过此配置imageView的行为,但是如果设置它的显示图片则是无效的
btn.imageView?.exclusiveTouch = true
//设置图片无效
btn.imageView?.image = UIImage(named: "icon")

注意:如果按钮样式为.DetailDisclosure.InfoLight.InfoDark.ContactAdd,那么属性 imageViewnil

设置背景颜色/背景图片

//设置背景颜色,如果设置了背景图片,则此设置无效
btn.backgroundColor = UIColor.grayColor()
//设置背景图片
btn.setBackgroundImage(UIImage(named: "background"), forState: UIControlState.Normal)

如果在Attributes inspector(属性面板)中设置了按钮type.DetailDisclosure或者是其它类型,但是如果设置了image 或者 BackGroundImage,那么type属性会变成.Custom,也就是说如果设置了按钮图片,或背景图片,那么就为自定义类型按钮。但是如果是代码创建的则并不会改变按钮的类型。

let btn = UIButton(type: UIButtonType.DetailDisclosure)
//设置位置及大小
btn.frame = CGRect(x: 100, y: 400, width: 90, height: 30)
//设置背景图片
btn.setBackgroundImage(UIImage(named: "bg"), forState: UIControlState.Normal)
// 获取类型
let type = UIButtonType(rawValue: btn.buttonType.rawValue)
//判断类型有没有改变,结果是会打印下面的文字
if type == UIButtonType.DetailDisclosure {
       print("button type is not changed")
   }

下图左边是自定义风格(.System.Custom)按钮,右边是系统带图标(.DetailDisclosure.InfoLight.InfoDark.ContactAdd类型)按钮,通过设置背景,和背景图片,显示效果有明显的差别。
这里写图片描述

设置按钮内部图片间距和标题间距

可通过此设置按钮的布局。

let insets = UIEdgeInsets(top:10, left:10, bottom:10, right:10)
// 设置按钮内部图片间距
button.imageEdgeInsets = UIDegeInsets(top:0, left: 0, bottom:0, right: 50)
//设置内容间距
bt.contentEdgeInsets = insets
// 标题间距
bt.titleEdgeInsets = insets
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值