2015-12-15 7 views
7

Я разрабатываю приложение для iPad Pro. В этом приложении containerView используйте для добавления дополнительных views и взаимодействуйте с ними.Делегат с использованием Container View в Swift

Во-первых, я создал протокол:

protocol DataViewDelegate { 
    func setTouch(touch: Bool) 
} 

Затем я создал свой первый контроллер представления

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

}

И, наконец, я создал представление который будет встроен в контейнерView.

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 функции.

Мой вопрос: В этом случае, используя контейнер, как я могу сделать обмен данными между двумя режимами ViewsControllers?

+0

Для связи между контроллерами зрения вы можете использовать делегирование, как вы делаете. Тем не менее, вы должны прочитать руководство по программированию UIViewController для Apple https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/DesignTips.html для передового опыта, в частности раздела «Сделать каждый контроллер просмотра на острове». – beyowulf

ответ

4

Похоже, вы определили делегата, но не определили делегата. Это происходит со мной все время.

+0

Я нахожусь на ранних этапах протоколов и делегатов. Как установить делегат? – James

+0

Вы можете установить делегат в родительском представлении контроллера readyForSegue – beyowulf

17

Как @nwales сказал, что вы еще не определили делегата. Вы должны сделать делегат в функции prepareForSegue на вашем первом viewController (который содержит viewContainer)

Сначала выберите встроенный сегмент и установите идентификатор в инспекторе атрибутов. Тогда в parentViewController реализации Func 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 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^