【发布时间】:2017-03-17 14:19:54
【问题描述】:
我仍在提高我在 iOS(Swift) 中的编程技能。今天我正在考虑以一种好的方式创建一个 UIView 子类。我想创建自定义视图:
- @IBDesignable - 我想在 storyboard/xib 中看到我的视图渲染;
- 可通过代码创建
我知道init(withFrame)init()init(withDecoder)prepareForInterfacebuilder()等方法,但我不知道如何使用它们来最大限度地减少代码冗余。
例如这里是我自定义的UIButton:
import UIKit
@IBDesignable
class SecurityButton: UIButton {
@IBInspectable
var color: UIColor = UIColor.black {
didSet {
setTitleColor(color, for: .normal)
contentEdgeInsets = UIEdgeInsetsMake(0.0, 8.0, 0.0, 8.0)
layer.borderWidth = 1.0
layer.borderColor = color.cgColor
layer.cornerRadius = 6.0
}
}
}
效果很好,但我知道每次设置新颜色时都会调用 contentEdgeInsets = UIEdgeInsetsMake(0.0, 8.0, 0.0, 8.0) layer.cornerRadius = 6.0 layer.borderWidth = 1.0。我应该把这个自定义设置放在哪里来满足我对自定义视图的要求?
编辑
我不是在寻找修复我的示例。我正在寻找一个初始化我的自定义视图的好地方。假设您需要做一些耗时的操作,但只在创建视图时进行。
【问题讨论】:
-
我通常使用 awakeFromNib 在自定义视图中进行设置。
-
我的自定义视图没有笔尖
-
它是为 IB 调用的,而不是专门为 nib 调用的。也适用于故事板
-
看我的要求。我想从代码中查看哪些是可设计和可创建的。当我从代码创建
SecurityButton时,awakeFromNib会调用吗?
标签: ios swift xcode interface-builder ibdesignable