Скрыть контейнер представления с помощью кнопки в 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()
}