我有一个UIButton,我想将它添加到多个UIViews。稍后 - 我想从其中一个超级视图中删除它。我正在尝试以下方式但是当我将removeFromSuperview消息传递给按钮时,它将从两个视图中删除:
[viewOverlay addSubview:myButton];
[viewButtons addSubview:myButton];
之后我希望它只能从viewOverlay中删除。
[myButton removeFromSuperview];
这会导致从两个视图中删除按钮。任何想法我怎么能实现这个???
奥贝德
答案 0 :(得分:2)
当我将removeFromSuperview消息传递给按钮时,它会得到 从两个视图中删除
它可能看起来那样,但是当myButton
将viewOverlay
添加到viewButtons
时,-addSubview:
已被删除。来自viewOverlay
的文档:
视图只能有一个超级视图。如果视图已经有超视图和 该视图不是接收者,此方法删除了以前的 在使接收器成为新的超级视图之前的超视图。
此处唯一正确的解决方案是创建两个按钮,并为viewButtons
和superview
各添加一个按钮。这两个按钮可以看起来相同,具有相同的目标,并执行相同的操作,因此从用户的角度来看,它们看起来就像是“相同”按钮。但是一个视图一次只能有一个超级视图。我的意思是字面意思:每个视图都有一个{{1}}指针,指向包含它的视图,并且该点显然一次只能指向一个对象。
答案 1 :(得分:1)
您无法同时向多个视图添加一个视图。在这种情况下,首先添加的视图将被删除并添加第二个。为此,您需要再创建一个实例或副本。
来自here -
父视图可以包含任意数量的子视图,但每个子视图都有 只有一个superview,负责定位其子视图 适当。