代表不断返回零

时间:2016-06-08 08:21:28

标签: swift

在我的视图控制器中,我已经设置了这样的。

protocol MenuDelegate {
func updateIndexOfMenuExpanded(index: Bool)
}

class ViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {
var delegate : MenuDelegate?

func performaction() -> Void{
    delegate!.updateIndexOfMenuExpanded(false)
}
}

和我的baseviewcontroller

class BaseViewController: UIViewController, MenuDelegate{

func updateIndexOfMenuExpanded(index: Bool){
    self.menuIsExpanded = index
}
}

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:0)

您必须先设置委托。

let viewController = ViewController()
let baseViewController = BaseViewController()
viewController.delegate = baseViewController

将委托作为弱引用并且不强制用!展开也是明智之举。

class ViewController: UIViewController,UITableViewDataSource, UITableViewDelegate {
    weak var delegate : MenuDelegate?
    func performaction() {
        delegate?.updateIndexOfMenuExpanded(false)
    }
}

答案 1 :(得分:0)

当你想在viewcontrollers之间传递数据时使用委托。这个aproach是一对一的

以下是如何使用委托传递数据的答案 在viewcontroller中

在视图控制器中定义协议

protocol ViewController1BackClicked {  
func btnBackClicked(str : String)

}

类ViewController1:UIViewController {

var strTitle : String?
var delegate : ViewController1BackClicked?

override func viewDidLoad() {
    super.viewDidLoad()

    if strTitle != nil{
        title = strTitle
    }
}

override func viewWillDisappear(animated: Bool) {

    delegate?.btnBackClicked("Krutarth")


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

现在创建协议以在另一个视图控制器中传递数据

viewcontroller 1我们要访问数据

    func btnBackClicked(str: String) {
    title = str
}

输出:Krutarth

这是如何使用协议

的示例