我按照一些在线教程创建了一个带有两个标签的自定义视图。我已经将自定义xib连接到具有两个标签输出的swift类文件。当我从需要呈现视图的视图控制器初始化视图时,我在
行上得到SIGABRT
错误 let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
import UIKit
@IBDesignable class LevelButton: UIView {
@IBOutlet weak var levelLabel: UILabel!
@IBOutlet weak var score: UILabel!
var view:UIView!
var levelLabelText:String?
{
get
{
return levelLabel.text
}
set(levelLabelText)
{
levelLabel.text = levelLabelText
}
}
var scoreText:String?
{
get{
return score.text
}
set(scoreText)
{
score.text = scoreText
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init(coder aDecoder:NSCoder)
{
super.init(coder: aDecoder)
setup()
}
func setup()
{
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
addSubview(view)
}
func loadViewFromNib() -> UIView
{
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "LevelButton", bundle: bundle)
let view = nib.instantiateWithOwner(nil, options: nil)[0] as! UIView
return view
}
}
在主故事板中,我添加了一个视图,并使用上面的代码将它的自定义类设置为类,但是它没有显示任何东西,并且给出了一个SIGABRT错误。
我想不出解决办法。请建议(仅Swift)
这可能是你的问题的解决方案:
修改此函数:
func setup()
{
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
addSubview(view)
}
:
func setup() {
if self.subviews.count == 0 {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
addSubview(view)
}
}
来源:http://blog.boxuanzhang.me/custom-reusable-uiview-with-xib/