Как вызвать действие на встроенном 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
}
}
Посмотреть иерархию:
Дайте мне знать, если у вас возникнут другие проблемы, связанные с этим.