Swift中的UIView子类:在解包时发现IBOutlet为零

Ton*_*yGW 6 subclass uiview ios swift

我试图通过子类化在Swift中创建一个自定义视图UIView,并且我有一个名为MyViewPanel.xib的视图板,其类已分配给它MyCustomView.实施如下:

import UIKit
@IBDesignable
class MyCustomView: UIView {
 @IBOutlet weak var title: UILabel!

 var question: Question {
     didSet {
        print("did set question, title is: \(question.title)")
     }
 }

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


required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

override func drawRect(rect: CGRect) {
        let height = rect.height
        let width = rect.width
        let color: UIColor = UIColor.whiteColor()

        let drect = CGRect(x: (width * 0.25), y: (height * 0.25), width: (width * 0.5),height: (height * 0.5))
        let bpath: UIBezierPath = UIBezierPath(rect: drect)
        color.set()
        bpath.stroke()
    }

override func awakeFromNib() {
        super.awakeFromNib()
        print("awake from nib!")
        self.title.text = "Test title" // error: found nil while unwrapping an Optional Value 
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行时,我遇到以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

由于这awakeFromNib()是第一个生命周期事件UIView,我不明白为什么titleUILabel在这种情况下是零.

编辑:

要使用此自定义视图,我只需UIView在故事板上绘制一个矩形并将其分配给MyCustomView.在viewDidLoad()ViewController的故事板方法中,我在自定义视图上设置了问题:

override func viewDidLoad() {
   // myCustomView is an IBOutlet in the view controller
   myCustomView.question = question
}
Run Code Online (Sandbox Code Playgroud)

Dal*_*son 3

代码部分看起来不错,但这表明接口生成器中的插座未正确连接。在界面生成器的插座部分中,您可以看到标题插座已连接,并且没有显示表示错误的感叹号。此外,代码中的 IBOutlet 行旁边应该有一个实心圆圈,以指示插座已正确连接,并且该类已从接口生成器正确分配。