swift - 来自外部 XIB 的 DidSet 崩溃
问题描述
我有一个外部XIB
是@IBDesignable
. 在显示这个的视图中XIB
,我有这个出口。
@IBOutlet weak var digitizingButton: DigitizingButton! {
didSet {
digitizingButton.buttonIsBeingTouched = {[weak self] in
// bla bla
}
}
}
崩溃
digitizingButton.buttonIsBeingTouched = {[weak self] in
EXC_BAD_ACCESS(代码 2)
DigitizingButton
像这样加载:
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
self.loadViewFromNib()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.loadViewFromNib()
}
/** Loads instance from nib with the same name. */
func loadViewFromNib() {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: .init(String(describing: type(of: self))), bundle: bundle)
let myView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
self.view = myView
self.addSubview(myView)
}
有什么想法吗?提前致谢。
解决方案
尝试改变初始化的方法。
IBOutlet
将文件的第一个视图中的一个添加xib
到 swift 文件中:
@IBOutlet var containerView: UIView!
然后编辑您的loadViewFromBib
方法如下:
func loadViewFromNib() {
Bundle.main.loadNibNamed("DigitizingButton", owner: self, options: nil)
addSubview(containerView)
containerView.frame = self.bounds
containerView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
// Other initialization here
}
推荐阅读
- outlook - 响应式 html 电子邮件中的图像
- python - 从 django 管理面板更改主页上的段落
- angular - 使用 api 登录后,我的应用程序未将数据保存在本地存储中
- c# - AES256 CTR - 错误“指定的密钥不是此算法的有效大小”
- mongodb - mongodb聚合-嵌套组
- java - Facebook 登录 loaduserprofile
- go - 从单独的文件夹加载模型时如何解决“不允许导入周期”
- postgresql - 如何查看postgresql中特定列的数据
- c# - 如何修复“502 - Web 服务器在充当网关或代理服务器时收到无效响应”
- php - 用户注册的 Laravel 竞赛条件