使用Swift在Xcode 6中使用xib在自定义uiview中获取SIGABRT

我已经通过在线一些教程创build了一个具有两个标签的自定义视图。 我已经将自定义的xib连接到两个标签的sockets的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错误。

我无法找出解决scheme。 请build议(仅限Swift)。

这可能是您的问题的解决scheme:

改变这个function:

 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/