Swift -添加自定义Xib视图作为子视图编程



我做了一个自定义xib,我之前在我的故事板中使用过,我想简单地创建一个自定义视图调整大小的实例,然后将其作为子视图添加到uiscrollview。我试过在视图控制器的viewdidload函数中使用这段代码

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
}
}

而不是使用自动布局,我尝试简单地设置高度和宽度来测试手动添加子视图从这2行(也只是一个头,我是新的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
    }
}

,当你调用这个类进行初始化时,使用this。

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

试一次。但要确保xib文件的第一个视图是CardView类型。第一个视图的类是CardView。

最新更新