Программно удалить вложенное представление из его родителя и присоединить его к другому родителю

У меня есть 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)  
Другие вопросы по тегам