【发布时间】:2020-10-26 04:38:05
【问题描述】:
练习 MVC 模式并希望使用故事板将视图与视图控制器分开。
在 main.storyboard 我有一个视图控制器,在 rootview 中有一些 uilabels。
为了将视图代码与视图控制器分离,我从视图控制器场景中选择了视图,创建了 FruitDetailView 类并将其子类化到故事板身份检查器中。
并将 UILabel 连接到 FruitDetailView 类。
class FruitDetailView: UIView {
@IBOutlet weak var name: UILabel!
@IBOutlet weak var type: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
name.text = ""
type.text = ""
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func update(_ detail: Fruit) {
name.text = detail.name
type.text = detail.type
}
}
在 viewController 中,创建了 FruitDetailView() 实例。 并在 loadview() 方法中,将fruitDetailView 实例分配给视图属性。
class FruitDetailViewController: UIViewController {
private let fruitDetailView = FruitDetailViewController()
var fruit = Fruit()
override func loadView() {
view = fruitDetailView
fruitDetailView.update(fruit)
}
}
但是当我运行应用程序时,应用程序崩溃并出现错误。
我该如何解决这个问题?
【问题讨论】:
-
在 awakeFromNib() 而不是 init(frame:) 中初始化 name.text 和 type.text
-
@RobertCrabtree 如果我在 awakeFromNib() 中初始化这些属性,则没有错误。但它只显示黑色视图,我看不到任何标签。
-
这听起来像是一个完全不同的问题。你有没有限制你的标签?如果更改视图的背景颜色会怎样?
-
我在情节提要中设置了 uilabel 的约束。如果我将背景颜色更改为白色,我只会看到白色视图。
-
您确定您的文本字段中的文本不是空字符串
标签: swift uiview subclass loadview