我有一个用户可以拖放的UIButton。我用以下方法识别拖放:
func addTarget(_ target: AnyObject?,
action action: Selector, forControlEvents controlEvents: UIControlEvents)
另外,我有一个观点。视图和UIButton都是兄弟姐妹,并在IB中定义。
我的目标是当用户将按钮拖动到视图中时,该按钮将与其父级断开连接,其新父级将成为视图。换句话说,该按钮将是视图的子视图。
我正在做的是(当按钮被拖入视图时):
button.removeFromSuperview()
view.addSubview(button)
这确实从它的父母那里删除了按钮,但我仍然没有在视图中看到它。所以,我尝试给按钮一个红色背景,现在当按钮被拖动到视图时,我可以在模拟器左上角看到一些奇怪的小红色背景。
有人可以告诉我,我做错了什么?缺少某些东西?
答案 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)