Swift协议委托没有被解雇

时间:2015-09-12 21:32:52

标签: ios swift

我有一个包含容纳视图的容器视图的VC。 = Root VC拥有tableview

我已经从tableview设置了一个委托到根VC,它检查屏幕是向上还是向下滚动,这样就可以了。

我现在要做的是在根VC 表视图之间设置一个委托。当在根VC中单击按钮时,我想在表视图中触发一个函数。

这将使viewcontrollers彼此实现委托 - 这是一个问题吗?

例如:

class RootVC, tableViewDelegate
class Tableview, RootVCDelegate

我的代表看起来像这样:

protocol RootVCDelegate: class {
    func RootVCDidTouchGrid(controller: RootViewController)
}

class rootvc { ...

weak var delegate: RootVCDelegate?

@IBAction func gridButtonDidTouch(sender: AnyObject) {
        delegate?.RootVCDidTouchGrid(self)
    }

然后在表格视图中:

class tableview, RootVCDelegate {..

func RootVCDidTouchGrid(controller: RootViewController) {
        println("touched!")
    }

那么为什么永远不会println("touched!")被解雇?

由于

3 个答案:

答案 0 :(得分:0)

请在view didload中定义委托值:

delegate = self

答案 1 :(得分:0)

您似乎忘了设置代理。只需在delegate = self

中设置viewDidLoad即可

答案 2 :(得分:0)

  1. 您在RootVCDelegate
  2. 中创建了RootViewController类型的(弱)委托属性
  3. 您的TableView班级符合RootVCDelegate
  4. 您忘记将delegate RootViewController属性分配给TableView个实例。
  5. 您错过了以下内容:

    class tableview, RootVCDelegate {..
    
        override func viewDidLoad() {
            super.viewDidLoad()
            rootViewController.delegate = self
        }
    
        func RootVCDidTouchGrid(controller: RootViewController) {
            println("touched!")
        }
    }