Скрыть контейнер представления с помощью кнопки в ViewContainer

У меня есть View. В этом представлении у меня есть Container View. И в ContainerView у меня есть кнопка.

Когда я касаюсь кнопки ContainerView, я хочу, чтобы ContainerView стал скрытым.

Я хочу сделать что-то вроде этого:

class ContainerView: UIViewController {

    @IBAction func closeContainerViewButton(sender: AnyObject) {
        //I try this : self.hidden = false
        //or this :    self.setVisibility(self.INVISIBLE)
    }

}

Любая идея, как это сделать?

Ответ 1

Есть серваки, но здесь самый простой, но не самый красивый. Вы действительно должны использовать делегатов, но это хакерский способ начать работу. Просто создайте глобальную переменную класса, содержащего контейнер (startController в этом случае). Затем вызовите его из своего другого контроллера представления (MyViewInsideContainer) и скажите ему, чтобы он скрыл вид, в котором вы находитесь. Я не запускаю этот код, но он должен работать.

var startController = StartController()

class StartController:UIViewController {

    @IBOutlet var myViewInsideContainerView: UIView

    ....

    override func viewDidLoad() {
        super.viewDidLoad()
        startController = self
    }

    func hideContainerView(){
        self.myContainerView.hidden = true
    }
}

class MyViewInsideContainer:UIViewController {

    ...

    @IBAction func hideThisView(sender: AnyObject) {
        startController.hideContainerView()
    }

}

Ответ 2

Я думаю, что более чистым решением является использование делегирования:

в ParentViewController

class ParentViewController: UIViewController ,ContainerDelegateProtocol
{
@IBOutlet weak var containerView: UIView!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    //check here for the right segue by name
    (segue.destinationViewController as ContainerViewController).delegate = self;
}
func Close() {
        containerView.hidden = true;
    }

в контейнере ContainerViewController

protocol ContainerDelegateProtocol
{
    func Close()
}
class ContainerViewController: UIViewController {


    var delegate:AddTaskDelegateProtocol?

    @IBAction func Close(sender: AnyObject) { //connect this to the button
        delegate?.CloseThisShit()

    }