swift UIButton用法详解
2021-06-22 本文已影响0人
JianLee
创建
let button=UIButton()
button.frame=CGRect(x: 95, y: 180, width: 200, height: 40)
view.addSubview(button)
设置背景颜色
button.backgroundColor=UIColor.yellow
设置圆角边框
button.layer.borderColor=UIColor.red.cgColor
button.layer.borderWidth=5
button.layer.cornerRadius=10
设置不同按钮状态显示
button.setTitle("普通状态", for: .normal)//设置按钮显示的文字
button.setTitle("触摸状态", for: .highlighted)
button.setTitle("禁用状态", for: .disabled)
button.setTitleColor(UIColor.red, for: .normal)
button.setTitleColor(UIColor.blue, for: .highlighted)
button.setTitleColor(UIColor.gray, for: .disabled)
button.setTitleShadowColor(UIColor.green, for:.normal) //普通状态下文字阴影的颜色
button.setTitleShadowColor(UIColor.yellow, for:.highlighted) //普通状态下文字阴影的颜色
button.setTitleShadowColor(UIColor.gray, for:.disabled) //普通状态下文字阴影的颜色
设置按钮状态不可用
sender.isEnabled=false
设置文本字体
button.titleLabel?.font = UIFont.systemFont(ofSize: 23)//设置字体
button.titleLabel?.font = UIFont.init(name: "HelveticaNeue-Bold", size: 23)//使用其它字体
设置文本图标
let button=UIButton(type: UIButton.ButtonType.contactAdd)
//或者
button.setImage(UIImage(named:"alarm"), for: .normal)
修改图标文本间距
button.imageEdgeInsets=UIEdgeInsets.init(top: 0, left: -10, bottom: 0, right: 0)
button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 0)
设置按钮背景图片
button.setBackgroundImage(UIImage(named:"bgImg"), for: .normal)
按钮点击事件
常用的触摸事件类型:
- touchDown:单点触摸按下事件,点触屏幕
- touchDownRepeat:多点触摸按下事件,点触计数大于1,按下第2、3或第4根手指的时候
- touchDragInside:触摸在控件内拖动时
- touchDragOutside:触摸在控件外拖动时
- touchDragEnter:触摸从控件之外拖动到内部时
- touchDragExit:触摸从控件内部拖动到外部时
- touchUpInside:在控件之内触摸并抬起事件(常用点击事件)
- touchUpOutside:在控件之外触摸抬起事件
- touchCancel:触摸取消事件,即一次触摸因为放上太多手指而被取消,或者电话打断
添加按钮点击事件
- 不传递点击对象
button.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
@objc func btnClick(){
print("没有传递触摸对象")
}
- 传递点击对象
button.addTarget(self, action: #selector(btnClick(_:)), for: UIControl.Event.touchUpInside)
@objc func btnClick(_ sender:UIButton){
print("点击按钮")
}
- 传递参数给相关方法
button.addTarget(self, action: #selector(btnClick(_:)), for: UIControl.Event.touchUpInside)
button.tag = 100
@objc func btnClick(_ sender:UIButton){
let tag = sender.tag
print("传递的tag:\(tag)")
}
按钮文字太长处理方式
我们可以通过修改按钮中 titleLabel 的 lineBreakMode 属性,便可以调整按钮在文字超长的情况下如何显示,以及是否换行。
lineBreakMode 共支持如下几种样式:
- byTruncatingHead:省略头部文字,省略部分用...代替
- byTruncatingMiddle:省略中间部分文字,省略部分用...代替(默认)
- byTruncatingTail:省略尾部文字,省略部分用...代替
- byClipping:直接将多余的部分截断
- byWordWrapping:自动换行(按词拆分)
- byCharWrapping:自动换行(按字符拆分)
注意:当设置自动换行后(byWordWrapping 或 byCharWrapping),我们可以在设置 title 时通过 \n 进行手动换行。