UIButton是我们经常用的一个控件,它是继承自UIControl的,下面就总结一下相关属性及用法:
1.UIButton的创建
a.不带样式的:
let btn: UIButton = UIButton()
b.带样式的:
let btns:UIButton =UIButton(type: UIButtonType);
其中UIButtonType是一个枚举如下所示:
public enum ButtonType : Int, @unchecked Sendable {
case custom = 0
@available(iOS 7.0, *)
case system = 1
case detailDisclosure = 2
case infoLight = 3
case infoDark = 4
case contactAdd = 5
@available(iOS 13.0, *)
case close = 7
public static var roundedRect: UIButton.ButtonType { get }
}
用法如下:
let btn: UIButton = UIButton(type: .Custom)
2.UIButton设置字内容和颜色
btn.setTitle("按钮", forState: .Normal)
btn.setTitleColor(UIColor.white, forState: .Normal)
3.UIButton设置背景颜色和背景图片
btn.backgroundColor =UIColor.black
btn.setBackgroundImage(UIImage(named:"1"), forState: .Normal)
4.UIButton设置字体大小
btn.titleLabel?.font =UIFont.systemFontOfSize(20)
5.禁用UIButton
btn.enabled =false //禁止按钮,默认为true
6.设置圆角
btn.layer.cornerRadius = 8
7.设置背景图片为圆角(因为我们直接设置UIButton圆角时,图片不会变为圆角)
buttonImage.setImage(UIImage(named:"1") , forState: UIControlState.Normal)
//设置背景图片为圆角
buttonImage.imageView?.layer.cornerRadius = 50
8.在UIButton上添加图片和文字,有时需要我们调整,此时需要:
方向为逆时针方向,上、左、下、右依次去设置的
btn.imageEdgeInsets =UIEdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat)
btn.titleEdgeInsets =UIEdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat)
例子如下:
//创建一个图片一个文字的按钮
let btn2: UIButton = UIButton(type: .Custom)
btn2.frame = CGRectMake(50, 100, 120, 35)
btn2.setImage(UIImage(named: "1"), forState: .Normal)
btn2.backgroundColor = UIColor.black
btn2.titleLabel?.font = UIFont.systemFontOfSize(20)
btn2.imageView?.contentMode = UIViewContentMode.ScaleAspectFit
btn2.setTitle("图片按钮", forState: .Normal)
//偏移量,分别为上下左右
btn2.imageEdgeInsets = UIEdgeInsetsMake(0, -50, 0, 0)
btn2.titleEdgeInsets = UIEdgeInsetsMake(0, -80, 0, 5)
btn2.setTitleColor(UIColor.white, forState: .Normal)
btn2.adjustsImageWhenHighlighted = false
self.view.addSubview(btn2)
9.添加按钮的点击事件
第一种是不带参数的,第二种是带参数的
//不带参数
testButton.addTarget(self, action: #selector(clickEvent), for: .touchUpInside)
//带参数
testButton.addTarget(self, action: #selector(clickEvent(_:)), for: .touchUpInside)
方式实现
//不带参数
@objc func clickEvent() {
//实现代码
}
//携带参数
@objc func clickEvent(_ sender: UIButton) {
//实现代码
}
写的代码如下:
func initButtonView() {
//创建有状态的按钮
let btn: UIButton = UIButton(type: .Custom)
btn.frame = CGRectMake(50, 20, 100, 30)
btn.setTitle("点击按钮", forState: .Selected)
btn.setTitle("未点击", forState: .Normal)
btn.backgroundColor = UIColor.black
btn.addTarget(self, action: #selector(clickBtn(_:), forControlEvents: .TouchUpInside)
self.view .addSubview(btn)
//创建无状态的按钮
let btn1: UIButton = UIButton()
btn1.frame = CGRectMake(50, 60, 100, 30)
btn1.setTitle("Normal", forState: .Normal)
btn1.backgroundColor = UIColor.blue
self.view.addSubview(btn1)
//创建一个图片一个文字的按钮
let btn2: UIButton = UIButton(type: .Custom)
btn2.frame = CGRectMake(50, 100, 120, 35)
btn2.setImage(UIImage(named: "1"), forState: .Normal)
btn2.backgroundColor = UIColor.blackColor()
btn2.titleLabel?.font = UIFont.systemFontOfSize(20)
btn2.imageView?.contentMode = UIViewContentMode.ScaleAspectFit
btn2.setTitle("图片按钮", forState: .Normal)
//偏移量,分别为上下左右
btn2.imageEdgeInsets = UIEdgeInsetsMake(0, -50, 0, 0)
btn2.titleEdgeInsets = UIEdgeInsetsMake(0, -80, 0, 5)
btn2.setTitleColor(UIColor.white, forState: .Normal)
btn2.adjustsImageWhenHighlighted = false
self.view.addSubview(btn2)
//创建禁止按钮
let btn3: UIButton = UIButton(type: .Custom)
btn3.frame = CGRectMake(50, 140, 100, 35)
btn3.setTitle("点击按钮", forState: .Highlighted)
btn3.setTitle("禁止按钮", forState: .Normal)
btn3.enabled = false //禁止按钮,默认为true
btn3.setTitleColor(UIColor.red, forState: .Disabled)
btn3.backgroundColor = UIColor.purple
self.view.addSubview(btn3)
//创建圆角按钮
let btn4: UIButton = UIButton(type: .Custom)
btn4.frame = CGRectMake(50, 180, 100, 35)
btn4.backgroundColor = UIColor.black
btn4.setTitle("圆角按钮 ", forState: .Normal)
btn4.setTitleColor(UIColor.white, forState: .Normal)
btn4.layer.cornerRadius = 8
self.view.addSubview(btn4)
//部分圆角按钮,主要利用layer的mask属性,在tongguoCAShaperLayer和UIBezierPath来画
let btn5: UIButton = UIButton(type: .Custom)
btn5.frame = CGRectMake(50, 220, 100, 35)
btn5.backgroundColor = UIColor.black
btn5.setTitle("部分圆角按钮", forState: .Normal)
btn5.setTitleColor(UIColor.white, forState: .Normal)
let shape: CAShapeLayer = CAShapeLayer()
let bepath: UIBezierPath = UIBezierPath(roundedRect: btn5.bounds, byRoundingCorners: [UIRectCorner.TopRight,UIRectCorner.TopLeft,UIRectCorner.BottomLeft], cornerRadii: CGSize(width: 8, height: 8))
UIColor.black.setStroke()
shape.path = bepath.CGPath
btn5.layer.mask = shape
self.view.addSubview(btn5)
//创建带边框的按钮
let btn6: UIButton = UIButton(type: .Custom)
btn6.frame = CGRectMake(50, 260, 100, 35)
btn6.setTitle("边框按钮", forState: .Normal)
btn6.setTitleColor(UIColor.black, forState: .Normal)
btn6.layer.borderColor = UIColor.black.CGColor
btn6.layer.borderWidth = 1
btn6.layer.cornerRadius = 8
self.view.addSubview(btn6)
//显示提示信息的UILabel
labelText = UILabel()
labelText.frame = CGRectMake(50, 300, 100, 44)
labelText.textColor = UIColor.orange
self.view.addSubview(labelText)
let btns: UIButton = UIButton(type: .Custom)
btns.frame = CGRectMake(<#T##x: CGFloat##CGFloat#>, <#T##y: CGFloat##CGFloat#>, <#T##width: CGFloat##CGFloat#>, <#T##height: CGFloat##CGFloat#>)
btn.setTitle("按钮", forState: .Normal)
btn.setTitleColor(UIColor.white, forState: .Normal)
btn.backgroundColor = UIColor.black
btn.setBackgroundImage(UIImage(named: "1"), forState: .Normal)
btn.imageEdgeInsets = UIEdgeInsetsMake(<#T##top: CGFloat##CGFloat#>, <#T##left: CGFloat##CGFloat#>, <#T##bottom: CGFloat##CGFloat#>, <#T##right: CGFloat##CGFloat#>)
btn.titleEdgeInsets = UIEdgeInsetsMake(<#T##top: CGFloat##CGFloat#>, <#T##left: CGFloat##CGFloat#>, <#T##bottom: CGFloat##CGFloat#>, <#T##right: CGFloat##CGFloat#>)
btn.addTarget(self, action: #selector(clickEvent), forControlEvents: .TouchUpInside)
}
@objc func clickBtn(_ sender: UIButton){
sender.selected = !sender.selected
labelText.text = "点击了按钮"
}
效果图如下: