【问题标题】:Swift: Assign delegate class when delegator class isn't a direct child?Swift:当委托人类不是直接孩子时分配委托类?
【发布时间】:2017-02-05 12:19:09
【问题描述】:

我正在制作一个使用一组向下钻取表的应用程序,每个表都有自己的 TableViewController,所以我的故事板设置了一个 MainViewController,它与一个 TableViewController (MainTable) 有一个 segue,而另一个 TableViewController 有一个segue (子表)。我创建了一个协议,现在我尝试将 SubTable 分配为委托人,将 MainTable 分配为委托人。我发现的所有解决方案仅在直接从委托类调用(或转入)委托时才有效,在这种情况下,您可以在 prepareForSegue 方法中使用SubTable.delegate = self,但如果调用 SubTable 则不起作用(创建)从委托类(MainView)中。抱歉,如果这令人困惑,我很乐意澄清其中任何一个。这是我想要的一个例子:

class MainViewController: UIViewController, delegate {
    override func viewDidLoad() {        
        super.viewDidLoad()
        SubTable.delegate = self //Doesn't work
    }

    func acceptData(data: String!) {
        print(data)
    }
}

SubTable.delegate = self 行不起作用,因为 SubTable 尚未创建,但如果我事先使用 let instance = SubTable()instance.delegate = self 之类的东西创建它,那么它仍然不起作用,因为 segue从 MainTable 到 SubTable 创建一个新的、单独的 SubTable 实例。

protocol delegate {
    func acceptData(data: String!)
}

class MainTable: UITableViewController { 

}

class SubTable: UITableViewController {
    var delegate: delegate?

    func sendData() {
      self.delegate?.acceptData(data: "some text")
    }
}

【问题讨论】:

  • 你在使用导航控制器吗?
  • 您是否尝试过设置委托的自定义初始化程序?还是在 SubTable 中使用 parentViewController?

标签: ios swift delegates delegation


【解决方案1】:

您可以将您的委托传递给 MainTable 并在创建 SubTable 时将其分配到那里。在 MainTable 中创建一个字段来存储它

var subTableDelegate : delegate?

在 MainViewController 中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! MainTable
    destinationVC.subTableDelegte = self
}

在主表中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! SubTable
    destinationVC.delegate = self.subTableDelegate
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2014-12-07
    相关资源
    最近更新 更多