一、UIButton 的创建
let btn = UIButton()
能够定义的 button 类型有以下6种:
public enum ButtonType : Int {
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 }
}
注意:system 和 custom 的区别:
custom的按钮许多方法都要自己设定,比如点击的闪烁、isEnable 的置灰效果
QQ20210219-161501-HD
二、设置 frame
1.创建的时候设置
btn.frame = CGRectMake(10, 10, 300, 100)
2.约束 (snp 或者 Massory)
三、 基本属性
1.设置背景
btn.backgroundColor = UIColor. clear
2.边框
btn.layer.borderWidth = 1
btn.layer.borderColor = UIColor.green.cgColor
3.圆角效果
btn.layer.cornerRadius = btn.frame.height / 2.0 /// 圆角只要设置为高度的一半即可
4.设置按钮内部图片间距和标题间距
let insets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) /// 设置按钮内部图片间距
insets.top = insets.bottom = insets.right = insets.left = 10;
btn.contentEdgeInsets = insets;
btn.titleEdgeInsets = insets; /// 标题间距
5.设置 button 标题和标题颜色
btn.setTitle("点我", for: .normal)
btn.setTitleColor(UIColor.black, for: .normal)
6.设置 button 填充图片和背景图片
btn.setImage(UIImage.init(named: @"1"), for: .normal)
btn.setBackgroundImage(UIImage.init(named: @"1"), for: .normal)
注意:设置点击按钮图片不闪:
btn.adjustsImageWhenHighlighted = false
7.设置按钮按下会发光
btn.showsTouchWhenHighlighted = true /// 没啥用
8.其他属性
open var isEnabled: Bool // default is YES. if NO, ignores touch events and subclasses may draw differently
open var isSelected: Bool // default is NO may be used by some subclasses or by application
open var isHighlighted: Bool // default is NO. this gets set/cleared automatically when touch enters/exits during tracking and cleared on up
btn.imageView?.semanticContentAttribute = .forceRightToLeft // 默认图片在左边,文字在右边,通过这个属性可以设置图片和文字的位置
四、state 状态
State: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现
public struct State : OptionSet {
public init(rawValue: UInt)
public static var normal: UIControl.State { get } // 常规状态
public static var highlighted: UIControl.State { get } // 高亮状态
public static var disabled: UIControl.State { get } // 禁用状态
public static var selected: UIControl.State { get } // 选中状态
@available(iOS 9.0, *)
public static var focused: UIControl.State { get } // Applicable only when the screen supports focus
public static var application: UIControl.State { get } // additional flags available for application use
public static var reserved: UIControl.State { get } // flags reserved for internal framework use
}
五、添加或删除事件处理
OC:
[btn addTarget:self action:@selector(btnDidClick:) forControlEvents:UIControlEventTouchUpInside];
[btn removeTarget:nil action:nil forControlEvents:UIControlEventTouchUpInside];
swift:
btn.addTarget(self, action: #selector(click), for: .touchUpInside)
@objc func click() {
}
注意:swift中button点击事件一般不用原生的方法,使用RxSwift来进行绑定
六、一个小技巧
对于 storyBoard 或者 xib 有多个 button 的情况,可以把这些 button 放进一个集合里,共用同一个点击事件,再使用循环将 button 区分开
@IBOutlet var btns: [UIButton]!
@IBAction func btnDidClick(_ sender: UIButton) {
for btn in btns {
btn.layer.cornerRadius = btn.frame.height / 2.0 /// 圆角只要设置为高度的一半即可
btn.layer.borderWidth = 1
if btn == sender {
btn.layer.borderColor = UIColor.green.cgColor
} else {
btn.layer.borderColor = UIColor.gray.cgColor
}
}
}
关联技巧:
事件直接拖动就行
按钮先关联一个:
后面的按钮拖到名称那边就可以
一定要往名称那边拖!