UIButton - 按钮
继承关系
- NSObject ->UIResponder -> UIView ->UIControl -> UIButton
概述
UIButton
允许用户以点击或特定手势的方式与之交互,按钮包含一个文本、一个图像,或包含两者,可以定制它的外观。
初始化
直接创建按钮,并设置宽高
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
,那么属性 titleLabel
为nil
设置按钮图标
//设置图标图片
btn.setImage(UIImage(named: "icon"), forState: UIControlState.Normal)
//可通过此配置imageView的行为,但是如果设置它的显示图片则是无效的
btn.imageView?.exclusiveTouch = true
//设置图片无效
btn.imageView?.image = UIImage(named: "icon")
注意:如果按钮样式为.DetailDisclosure
、.InfoLight
、.InfoDark
、 .ContactAdd
,那么属性 imageView
为nil
设置背景颜色/背景图片
//设置背景颜色,如果设置了背景图片,则此设置无效
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