iOS: 神奇的addSubView

时间:2023-01-14 09:38:44

看着addSubView, 本以为是添加多个对象, 但通过测试代码, 发现同一个对象在addSubView中只会添加一次. 想想, 视图对象是通过引用得到的. 在视图的子视图集中, 只保存一个相应的对象, 才不会造成系统的混乱.

    override func viewDidLoad() {
super.viewDidLoad() var view2 = UIView(frame: CGRectZero) //重复添加多次
for i in ...{
view.addSubview(view2)
} //结果, 只添加了一次
//view.subviews中只有三项, 前两项是_UILayoutGuide
println(view.subviews.count)
for i in view.subviews{
println(i)
}
}

查看addSubView的帮助, 找到了原因:

Views can have only one superview. If view already has a superview and that view is not the receiver, this method removes the previous superview before making the receiver its new superview.

视图有且只有一个父视图. 如果视图已经有一个父视图并且这个父视图不是将要添加的视图, 本方法会把视图原有的父视图移除, 将新视图设置为父视图.