Как вызвать действие на встроенном ContainerViewController из ViewController и как сделать это наоборот?

Кто-нибудь знает, как передать действие из ViewController в его ContainerViewController. Я пытаюсь скрыть вид контейнера с помощью действия, которое запускается само по себе. ContainerViewController встроен в представление контейнера.

ViewController:

@IBOutlet weak var ChoseLanguageContainer: UIView!


**ContainerViewController:**

@IBAction func action(_ sender: Any) {

    ViewController().containerView.isHidden = true 

} //I know this does not work

2 ответа

У меня было подобное требование, я создал свои собственные методы делегата, которые были реализованы в ContainerViewController.

 protocol  ContainerViewControllerDelegate :class{
        func notifyItemChange(any params you need to pass.)
    }

В моем контейнере ViewController я создал переменную для делегата.

var changeContainerDelegate :ContainerViewControllerDelegate?

В моем родительском View Controller, который содержит контейнер, я сделал следующее.

Получить экземпляр контроллера вида, который встроен в контейнер.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if let containerViewController = segue.destination as? ContainerViewController{
             containerViewController.changeContainerDelegate = self

            }

Создайте IBOutlet представления контейнера в вашем контроллере представления.

Соответствуйте этому протоколу и запишите реализацию в контроллере View.

func changeContainerVC(containerVCName : String ,dataToBePassed:[AnyObject]?) {
       containerView.isHidden = true
}

В действии кнопки внутри ContainerViewController вызовите делегат, например:

changeContainerDelegate?.notifyItemChange ()

Это работает для меня. Надежда тоже помогает нам!

В вашем коде:

ViewController().containerView.isHidden = true 

Вы делаете новый экземпляр ViewController и использовать его, чтобы скрыть containerView, Это не сработает. Вместо этого вам нужно скрыть containerView текущего экземпляра ViewController т.е. self,

Вот код, который вы можете попробовать:

class ViewController: UIViewController
{
    @IBOutlet weak var containerView: UIView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    @IBAction func hideContainerView(_ sender: UIButton)
    {
        self.containerView.isHidden = true
    }
}

Посмотреть иерархию:

Дайте мне знать, если у вас возникнут другие проблемы, связанные с этим.

Другие вопросы по тегам