我正在尝试创建一个从UIViewController呈现的视图。为此,我创建了一个UIView(OnboardingCaptureView.swift)的子类,以及一个.xib接口文件。在我的界面中,我有一个名为alertLabel的标签。在我的OnboardingCaptureView类的init方法中,我设置了4个参数,并将标签设置为字符串参数message。
出于某种原因,当我分配此视图并将其添加为子视图时,它会崩溃并说“致命错误:在展开Optional值时意外发现nil”。当我删除此标签时,它会在我所需的init中崩溃?方法。我不知道为什么我不能创建和呈现UIView的简单子类。我有一种感觉,Xcode正在烦我,但我已经构建,清理了派生数据,并重新启动了多次。我的代码有问题吗?
//Custom UIView subclass
class OnboardingCaptureView: UIView {
@IBOutlet private weak var alertLabel: UILabel!
init(triangleXOffset: CGFloat, closeButtonOnTop: Bool, message: String, frame: CGRect) {
super.init(frame: frame);
//Crashes at next line, claims self.alertLabel is nil
self.alertLabel.text = message
connectNibUI()
}
required init?(coder aDecoder: NSCoder) {
//If i disconnect the alertLabel outlet and remove it, it crashes here
fatalError("init(coder:) has not been implemented")
}
}
//Creating and adding subview
let onboardingCaptureView = OnboardingCaptureView(triangleXOffset: 0, closeButtonOnTop: true, message: "Alert", frame: CGRectMake(0,0,200,200))
self.onboardingView = onboardingCaptureView
self.view.addSubview(onboardingCaptureView)
//编辑 - > connectNibUI方法
extension UIView {
func connectNibUI() {
let nib = UINib(nibName: String(self.dynamicType), bundle: nil).instantiateWithOwner(self, options: nil)
let nibView = nib.first as! UIView
nibView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(nibView)
nibView.snp_makeConstraints { (make) -> Void in
make.edges.equalTo(self)
}
}
}
答案 0 :(得分:0)
可能您的alertLabel
实际上未被分配
首先,只需仔细检查即可确保将插座实际连接到笔尖。
这里的问题实际上是你的自定义视图正在创建,但是nib不是。你的connectNibUI()
功能发生了什么?如果您正在加载笔尖,那么您可能需要做的就是在该函数之后设置标签文本。