2015-12-15 12 views
7

iPad用アプリを開発しています。このアプリではcontainerViewを追加してviewsを追加し、それらとやり取りします。Swiftでコンテナビューを使用する代理人

まず、私は、プロトコル作成:私は私の最初のビューコントローラ

enter image description here

import UIKit 

class ViewController: UIViewController, DataViewDelegate { 

    @IBOutlet var container: UIView! 
    @IBOutlet var labelText: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    func setTouch(touch: Bool) { 
     if touch == true { 
      labelText.text = "Touch!" 
     } 
    } 

}

そして最後を作成し、その後

protocol DataViewDelegate { 
    func setTouch(touch: Bool) 
} 

を、私は、ビューを作成しましたこれはcontainerViewに埋め込まれます。

enter image description here

import UIKit 

class ContainerViewController: UIViewController { 

    var dataViewDelegate: DataViewDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func touchMe(sender: AnyObject) { 
     dataViewDelegate?. setTouch(true) 
    } 

}

しかし、いくつかの理由のために、何が最初のビューコントローラがsetTouch機能に何も受信しない、起こりませんでした。

私の質問はです。この場合、コンテナを使用して、2つのViewsController間で通信を行うにはどうすればよいですか?

+0

: はその後parentViewControllerにこのようにfunc prepareForSegueを実装します。しかし、ベストプラクティス、特に「各View Controllerを島にする」セクションについては、appleのUIViewControllerプログラミングガイドhttps://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/DesignTips.htmlを参照してください。 – beyowulf

答えて

4

デリゲートを定義したようですが、デリゲートは設定されていません。これは常に私に起こります。

+0

私は議定書と議員の初期段階にあります。デリゲートを設定するにはどうすればよいですか? – James

+0

親ビューコントローラのprepareForSegueでデリゲートを設定できます – beyowulf

17

@nwalesさんのように、まだデリゲートを設定していないと言われました。最初のviewController(viewContainerを含む)のprepareForSegue関数でデリゲートを設定する必要があります

最初に、埋め込みセグを選択し、属性インスペクタで識別子を設定します。あなたがやっているようあなたは、委任を使用することができますビューコントローラ間で通信するには

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
    if(segue.identifier == "the identifier"){ 
     let embedVC = segue.destinationViewController as! ContainerViewController 
     embedVC.dataViewDelegate = self 
    } 
}