2015-12-15 26 views
7

iPad Pro için bir uygulama geliştiriyorum. Bu uygulamada, views ek eklemek ve onlarla etkileşime girmek için containerView kullanın.Delta uygulamasını Kapsayıcı Görünümü'nü kullanarak Swift uygulamasında

Birincisi, bir protokol oluşturdu: Ben ilk görünüm denetleyicisi

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!" 
     } 
    } 

}

Ve nihayet yarattı, sonra

protocol DataViewDelegate { 
    func setTouch(touch: Bool) 
} 

, Genişletilmiş sayfanın yarattı containerView içine gömülecek.

Ama nedense

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

}, hiçbir şey ilk görünüm denetleyicisi setTouch fonksiyonunda hiçbir şey alır oldu.

Soruma soru: Bu durumda, kapsayıcı kullanarak, iki ViewControllers arasındaki iletişimi nasıl yapabilirim?

+0

yaptığınızı gibi, heyet kullanabilirsiniz görünümü denetleyicileri arasında iletişim kurmak için. Ancak, en iyi uygulamalar için Apple'ın UIViewController programlama kılavuzunu https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/DesignTips.html, özellikle de "Her Bir Görünüm Denetleyicisini Ada Yapın" başlıklı bölümü okuyun. – beyowulf

cevap

4

Delegeyi tanımladığınız, ancak temsilci belirlemediğiniz anlaşılıyor. Bu bana her zaman olur.

+0

Protokoller ve Delegelerin erken aşamalarındayım. Temsilciyi nasıl ayarlayabilirim? – James

+0

Delegeyi ana görünüm denetleyicinizin prepareForSegue öğesinde ayarlayabilirsiniz. – beyowulf

17

Beğen @nwales henüz temsilci belirlemediğini söyledi. İlk viewController'da (viewContainer öğesini içeren) prepareForSegue işlevinde temsilci seçmelisiniz

Önce katmanı seçin ve öznitelik denetçisinde bir tanımlayıcı belirleyin. Sonra parentViewController böyle fonk prepareForSegue uygulamak:

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 
    } 
} 
İlgili konular