我有一个UIViewController Car
,它是另一个UIViewController Vehicle
的子类。
class Vehicle: UIViewController {
override func viewDidLoad() {
let vehicleLabel = UILabel()
vehicleLabel.text = "This is the Vehicle"
view.addSubview(vehicleLabel)
}
}
class Car: Vehicle {
override func viewDidLoad() {
super.viewDidLoad()
let carLabel = UILabel()
carLabel.text = "This is the Car"
super.view.addSubview(carLabel)
}
}
// called like this
let carController = Car()
presentViewController(carController, animated: false, completion: nil)
从Car
我想在Vehicle
顶级视图中添加UILabel。但是,我最后尝试将其添加到Car
视图中。
我尝试过直接访问父视图:
super.view.addSubview(carLabel)
还尝试创建一个在Vehicle上添加视图的函数:
func addToSuperView(label: UILabel){
self.view.addSubview(label)
}
还试过玩superclass
但失败了。我最终得到了这个,标签位于与创建它们的UIViewController视图相关联的视图上。我喜欢Vehicle
上的两个标签。
我该怎么做?
答案 0 :(得分:1)
修改强>
分解视图不是您应该关注的内容,因为最常用的UIKit类具有许多私有使用的包装器视图和容器视图。
您可以确定的是,没有任何车辆或其视图的实例可以存在,因为您还没有为其编码。另请注意视图层次结构 - 只有一个标签,而不是两个。
答案 1 :(得分:1)
A" super.view"与您的父UIViewController视图不一致。
A" super.view"是视图层次结构中的东西。 父类或子类是类继承中的东西。
两者都完全不同!
备注:UpperCaseWriting =仅用于标记目的(强调关键参数)
答案 2 :(得分:1)
@Fook,For Car将UILabel添加到其superview,在这种情况下,Vehicle,Car必须是UIView的子类(不是UIViewController或Vehicle),必须作为子视图添加到Vehicle的视图中。然后Car可以在其超级视图中添加UILabel:
Car.superview?.addSubview(UILabel())
如果Car必须从UIViewController或Vehicle继承,那么Car必须由Vehicle提供。 Car是否继承车辆并不重要。然后,Car可以向视图控制器添加一个子视图,该视图控制器通过以下方式显示它:
presentingViewController?.view.addSubview(UILabel())