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