Swift – 以编程方式将自定义Xib视图添加为子视图

我做了一个定制的xib,我已经在我的故事板中使用过,我只想创build一个自定义视图resize的实例,然后将其作为子视图添加到uiscrollview。 我试过在我的视图控制器的viewdidload func中使用这块代码

let cardView = CardView(coder: NSCoder()) cardView!.frame.size.width = 100 cardView!.frame.size.height = 100 scrollView.addSubview(cardView!) 

但我得到这个错误

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -containsValueForKey: cannot be sent to an abstract object of class NSCoder: Create a concrete instance!' 

编辑:这是连接到CardView.xib的swift文件的代码

 import UIKit class CardView: UIView { @IBOutlet var view: UIView! @IBOutlet weak var cornerView: UIView! required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) NSBundle.mainBundle().loadNibNamed("CardView", owner: self, options: nil) self.addSubview(view) view.frame = self.bounds cornerView.layer.cornerRadius = 3 cornerView.layer.masksToBounds = true view.layer.shadowOffset = CGSizeMake(1, 5); view.layer.shadowRadius = 2; view.layer.shadowOpacity = 0.2; view.layer.masksToBounds = false } } 

而不是使用自动布局我试着简单的设置高度和宽度来testing从这两行手动添加子视图(也只是一个头,我是新的iOS开发)

 cardView!.frame.size.width = 100 cardView!.frame.size.height = 100 

下面是我使用自定义XIB进行视图初始化的情况。

在类视图类似于你的CardView的代码就像。

 class CardView: UIView { @IBOutlet weak var cornerView: UIView! func setupWithSuperView(superView: UIView) { self.frame.size.width = 100 self.frame.size.height = 100 superView.addSubview(self) cornerView = UIView(frame: self.bounds) cornerView.layer.cornerRadius = 3 cornerView.layer.masksToBounds = true view.layer.shadowOffset = CGSizeMake(1, 5); view.layer.shadowRadius = 2; view.layer.shadowOpacity = 0.2; view.layer.masksToBounds = false } } 

和你在调用这个类进行初始化的地方,使用这个。

 let cardView = NSBundle.mainBundle("CardView").loadNibNamed("", owner: nil, options: nil)[0] as! CardView cardView.setupWithSuperView(scrollView) 

试试这一次。 但要确保xib文件的第一个视图是CardViewtypes的。 我的意思是第一个视图的类是CardView。