12

我有一个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)
    }

}

知道怎么做吗?

4

2 回答 2

20

有很多方法,但这是最简单的一种,虽然不是最漂亮的。你真的应该使用委托,但这是一种入门的方式。只需创建一个包含容器的类的全局变量(在本例中为 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()
    }

}
于 2014-08-26T12:50:34.363 回答
9

我认为更清洁的解决方案是使用委托:

在父视图控制器中

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()

    }
于 2014-09-20T08:31:47.220 回答