【发布时间】:2017-06-14 21:31:20
【问题描述】:
我有一个 Hint.xib 文件,其中的元素很少(标签、图像视图和按钮)。我有一个名为 Hint 的类,它是 UIView 的子类,它加载这个 xib。
Hint 类的实现如下所示:
import UIKit
@IBDesignable
extension UIView {
class func fromNib<T : UIView>() -> T? {
guard
let nibs = Bundle(for: self).loadNibNamed(String(describing: self), owner: nil, options: nil),
let nib = nibs.first
else {
return nil
}
return nib as? T
}
}
class Hint:UIView {
@IBOutlet weak var hintLabel: UILabel!
private func setup(){
if let view = Hint.fromNib(){
self.addSubview(view)
view.frame = self.bounds
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
}
当前设置
目前,在情节提要上,我添加了一个视图控制器,并在该视图控制器的视图中拖动了一个 UIView。之后,我将其自定义类设置为Hint。另外我正在使用@IBDesignable 指令并覆盖prepareForInterfaceBuilder() 以在设计中呈现所有内容,这一切都有效,直到我尝试为作为Hint.xib 文件一部分的标签(hintLabel)创建一个出口.
我收到下一个错误:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序, 原因:'[ setValue:forUndefinedKey:]: 这个 类与键提示标签的键值编码不兼容。'
我选择了我的 Hint.xib 文件 -> 文件的所有者,并检查了 Identity Inspector 中是否一切正常,那里似乎一切正常:
通过 IB 或代码更改此标签文本的适当方法是什么。另外,我不能只在 Hint.xib 中更改这个标签的文本,因为我可能在一个屏幕上有多个视图来加载(从)这个 xib,并且所有这些视图都应该有不同的文本。我想我在这里遗漏了一些明显的东西……感谢您的提示:))
【问题讨论】:
标签: ios swift xcode interface-builder xib