web-dev-qa-db-ja.com

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

}

どのようにそれを行うのですか?

12
PMIW

サーバルな方法がありますが、ここが最も簡単な方法ですが、かわいくはありません。実際にはデリゲートを使用する必要がありますが、これは開始するためのハッキーな方法です。コンテナーを保持するクラス(この場合は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()
    }

}
20
rilar

より明確な解決策は委任を使用することだと思います:

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

    }
9
dowi