Программно удалить вложенное представление из его родителя и присоединить его к другому родителю
У меня есть UIButton, который пользователь может перетаскивать. Я распознаю перетаскивание с помощью следующего метода:
func addTarget(_ target: AnyObject?,
action action: Selector, forControlEvents controlEvents: UIControlEvents)
Кроме того, у меня есть вид. И представление, и UIButton являются родными братьями и определены в IB.
Моя цель состоит в том, чтобы, когда пользователь перетаскивает кнопку в представление, кнопка отключается от своего родителя, а ее новый родитель становится представлением. Другими словами, кнопка будет подпредставлением представления.
Что я делаю, это (когда кнопка перетаскивается в представление):
button.removeFromSuperview()
view.addSubview(button)
Это действительно удаляет кнопку из родительского элемента, но все же я не вижу ее в представлении. Итак, я попытался придать кнопке красный фон, и теперь, когда кнопка перетаскивается на вид, я вижу какой-то странный маленький красный фон в левом верхнем углу симулятора.
Может кто-нибудь сказать мне, пожалуйста, что я делаю не так? Скучаешь по чему-то?
3 ответа
Даниэль Рахамим,
Я полагаю, что кнопка добавляется к вашему виду, но поскольку рамка кнопки по-прежнему указывает на внешнее пространство (за пределы рамки дочерних представлений), вы не сможете ее увидеть. Попробуйте установить рамку и позвольте мне узнать, можете ли вы ее увидеть:)
button.removeFromSuperview()
button.frame = CGRectMake(view.center.x, view.center.y, button.frame.size.width, button.frame.size.height)
view.addSubview(button)
Если вы измените родительский объект какого-либо объекта, его фрейм останется таким же, как и у его старого родителя.
Таким образом, если рамка нового родителя отличается от старого родителя, вам нужно установить рамку вашего объекта в соответствии с новым родителем.
Чтобы сменить родителя, вы можете просто добавить объект в нового родителя, не нужно удалять объект из его старого родителя (объект removeFromSuperview), он будет управлять автоматически, потому что один объект может одновременно существовать у одного родителя.
Убрать кнопку из суперпредставления
button.removefromsuperview()
добавить его в представление
view.addsubview(button)