Ios 如何使用.xib以编程方式创建视图?

Ios 如何使用.xib以编程方式创建视图?,ios,swift,xib,custom-view,Ios,Swift,Xib,Custom View,我有一个简单的想法——假设我们有一个类似于本地通知的单音对象——当它被调用时,它应该在当前窗口上显示消息视图,无论用户现在在哪里。消息视图包含在.xib中,并获得下一个代码 @IBDesignable class MessageView : UIView { var view: UIView! var nibName: String = "MessageView" @IBOutlet weak var messageLabel: UILabel? @IBOutlet weak var cl

我有一个简单的想法——假设我们有一个类似于本地通知的单音对象——当它被调用时,它应该在当前窗口上显示消息视图,无论用户现在在哪里。消息视图包含在.xib中,并获得下一个代码

@IBDesignable class MessageView : UIView {

var view: UIView!

var nibName: String = "MessageView"

@IBOutlet weak var messageLabel: UILabel?
@IBOutlet weak var closeButton: UIButton?

@IBInspectable var message : String? {
    get {
        return messageLabel?.text
    }
    set {
        messageLabel?.text = newValue
    }
}

@IBInspectable var type : MessageType = .Info

// init

override init(frame: CGRect) {
    super.init(frame: frame)

   setup()
}

required init(coder aDecoder: NSCoder) {
    // properties
    super.init(coder: aDecoder)
   setup()
}

@IBAction func closeButtonTouched(sender: UIButton) {
    self.view.hidden = true
}

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 view = bundle.loadNibNamed(nibName, owner: nil, options: nil)[0] as! MessageView

    return view
}
}  
当我试图通过
init(frame:)
实例化它时,问题就出现了。由于未捕获的异常“NSUnknownKeyException”,下一个文本
终止应用程序时,它会在运行时崩溃,原因:“[setValue:forUndefinedKey:]:该类与key closeButton的键值编码不兼容。”
在loadNibNamed方法中

那么我应该使用
init(frame:)
还是不使用呢?我不明白为什么会出现这种问题。我在教程中做了所有类似的事情,但若你们不以编程的方式创建视图,那个么它是有效的


以下是有关教程的其他信息的链接-

作为错误状态,您没有在.xib和closeButton之间创建正确的连接,因此这与视图初始化无关。要修复此问题,请打开.xib文件,选择“关闭”按钮并检查连接检查器中是否缺少连接,因为错误状态是您没有在.xib和closeButton之间创建正确的连接,因此这与视图初始化无关。若要修复此问题,请打开.xib文件,选择“关闭”按钮并检查连接检查器中是否缺少连接,因为错误状态是您没有在.xib和closeButton之间创建正确的连接,因此这与视图初始化无关。若要修复此问题,请打开.xib文件,选择“关闭”按钮并检查连接检查器中是否缺少连接,因为错误状态是您没有在.xib和closeButton之间创建正确的连接,因此这与视图初始化无关。若要修复此问题,请打开.xib文件,选择close按钮并在connection inspector中检查缺少的连接

到目前为止,您的案例中的close按钮存在问题。关闭按钮的出口未正确连接到XIB

右键单击XIB中的关闭按钮,并将其连接到班级中的插座。 删除视图的文件所有者及其出口


此错误将得到解决。

目前为止,您的案例中的关闭按钮存在问题。关闭按钮的出口未正确连接到XIB

右键单击XIB中的关闭按钮,并将其连接到班级中的插座。 删除视图的文件所有者及其出口


此错误将得到解决。

目前为止,您的案例中的关闭按钮存在问题。关闭按钮的出口未正确连接到XIB

右键单击XIB中的关闭按钮,并将其连接到班级中的插座。 删除视图的文件所有者及其出口


此错误将得到解决。

目前为止,您的案例中的关闭按钮存在问题。关闭按钮的出口未正确连接到XIB

右键单击XIB中的关闭按钮,并将其连接到班级中的插座。 删除视图的文件所有者及其出口


这个错误将被解决。

我遇到了一个类似的问题,并为此疯狂。最后,在尝试并检查了所有内容后,唯一有帮助的是重命名.xib文件。

我遇到了类似的问题,并为此疯狂。最后,在尝试并检查了所有内容后,唯一有帮助的是重命名.xib文件。

我遇到了类似的问题,并为此疯狂。最后,在尝试并检查了所有内容后,唯一有帮助的是重命名.xib文件。

我遇到了类似的问题,并为此疯狂。最后,在尝试并检查了所有内容之后,唯一有帮助的是重命名.xib文件