以编程方式从其父级中删除子视图并将其附加到其他父级

时间:2016-06-01 06:38:29

标签: ios swift uiview addsubview

我有一个用户可以拖放的UIButton。我用以下方法识别拖放:

func addTarget(_ target: AnyObject?,
      action action: Selector, forControlEvents controlEvents: UIControlEvents)

另外,我有一个观点。视图和UIButton都是兄弟姐妹,并在IB中定义。

我的目标是当用户将按钮拖动到视图中时,该按钮将与其父级断开连接,其新父级将成为视图。换句话说,该按钮将是视图的子视图。

我正在做的是(当按钮被拖入视图时):

button.removeFromSuperview()
view.addSubview(button)

这确实从它的父母那里删除了按钮,但我仍然没有在视图中看到它。所以,我尝试给按钮一个红色背景,现在当按钮被拖动到视图时,我可以在模拟器左上角看到一些奇怪的小红色背景。

有人可以告诉我,我做错了什么?缺少某些东西?

3 个答案:

答案 0 :(得分:1)

Daniel Rahamim,

我相信按钮会被添加到您的视图中,但因为按钮的框架仍指向外部空间(超出子视图框架),您无法看到它。尝试设置框架并知道是否可以看到它:)

button.removeFromSuperview()
button.frame = CGRectMake(view.center.x, view.center.y, button.frame.size.width, button.frame.size.height)
view.addSubview(button)

答案 1 :(得分:0)

如果更改任何对象的父级,则其框架与旧父级框架保持一致。

因此,如果新父级的框架与旧父级框架不同,则需要根据新父级设置对象框架。

要更改父级,您只需将对象添加到新父级,无需从其旧父级(对象removeFromSuperview)中删除该对象,它将自动管理,因为一个对象可以同时存在于一个父级中时间。

答案 2 :(得分:0)

从superview中删除按钮

button.removefromsuperview()

将其添加到视图

view.addsubview(button)