一般在设定 UIButton 的时候,可能会设定文字颜色、背景色、阴影颜色等属性
那如果要设定按钮外观、按钮框线颜色、按钮框线宽度等其他属性的话,可能就要透过 Code 来处理
假设只有一个按钮的话,那可能只要设定一次就好
那如果有很多按钮都要这样做的话,有点太花时间了
所以我们可以透过写一次 Code,然後套用在每个有这种需求的 Button 上,所以下面就开始吧~
先新增一个 Swift 档案,选 Cocoa Touch Class
class 就自己取就可以了,Subclass 选 UIButton
目前应该会长这样
import Foundation
import UIKit
class CustomButton: UIButton {
}
接着我们可以透过 @IBInspectable 这个属性的定义来让按钮可以在介面建构器里进行客制化设定
像是 cornerRadius、borderWidth、borderColor 等这些没有出现在介面建构器上的选项
都可以透过这个方式来新增出来,让我们可以方便设定
但要注意一下,只有下面这几种属性可以透过 @IBInspectable 的方式新增喔
下面会以 cornerRadius、borderWidth、borderColor 这三个来做示范
class CustomButton: UIButton {
// MARK:- UIButton 圆角设定
@IBInspectable var cornerRadius: CGFloat = 0.0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
// MARK:- UIButton 框线设定
// 框线宽度
@IBInspectable var borderWidth: CGFloat {
get {
return layer.borderWidth
} set {
layer.borderWidth = newValue
}
}
// 框线颜色
@IBInspectable var borderColor: UIColor {
get {
return UIColor(cgColor: layer.borderColor!)
} set {
layer.borderColor = newValue.cgColor
}
}
}
接着,点想要套用的 Button,将他的 class 改为刚刚新增的 Swift 档案里面的 class 名称
以我的为例的话就是 CustomButton
接着就可以看到刚刚新增的 cornerRadius、borderWidth、borderColor 这三个选项了
虽然现在算是用好了,但如果要看到实际变化的话,还是得 Build 到模拟器或是手机/平板上才可以
这时候我们可以透过 @IBDesignable 这个属性的定义,将其加在 class 的前面
就可以让我们可以在不执行的情况下,就看到按钮的改变
下面是本篇的完整程序码
import Foundation
import UIKit
@IBDesignable class CustomButton: UIButton {
// MARK:- UIButton 圆角设定
@IBInspectable var cornerRadius: CGFloat = 0.0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
// MARK:- UIButton 框线设定
// 框线宽度
@IBInspectable var borderWidth: CGFloat {
get {
return layer.borderWidth
} set {
layer.borderWidth = newValue
}
}
// 框线颜色
@IBInspectable var borderColor: UIColor {
get {
return UIColor(cgColor: layer.borderColor!)
} set {
layer.borderColor = newValue.cgColor
}
}
}
好的,今天介绍的是比较偏向可以重复使用的小技巧,明天见~
仙女棒 ( 光迹效果 ) 教学原文参考:仙女棒 ( 光迹效果 ) 这篇文章会介绍,如何在 Scrat...
昨天把lidar配置完成,并且准备好做SLAM的工具,但还有一个最重要的功能就是,让车子动起来~~ ...
tags: ItIron2021 Javascript 前言 终於用了4天的时间把this相关的题型...
本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...
目前在浏览器储存使用者资料的主流方式有两种, 一种是存local storage、一种是存在Cook...