Swift:当委托者类不是直接子类时,分配委托类?

问题描述:

我正在制作一个应用程序,它使用一组深入表,每个表都有自己的TableViewController,所以我的故事板设置了一个MainViewController,它具有一个TableViewController(MainTable)的Segue,该TableViewController具有一个Segue到另一个TableViewController子表)。我创建了一个协议,现在我试图将SubTable分配为委托者和MainTable作为委托。我发现的所有解决方案仅在委托人被直接从委托类调用(或被segued)时才有效,在这种情况下,您可以在prepareForSegue方法中使用SubTable.delegate = self,但如果调用SubTable(创建)从委托类(MainView)中。对不起,如果这是令人困惑,我会很乐意澄清任何它。下面是我想要的一个例子:Swift:当委托者类不是直接子类时,分配委托类?

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

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

的SubTable.delegate =自行不工作,因为子表还没有被创建,但如果我创建它事先使用类似let instance = SubTable()然后instance.delegate = self然后它仍然没有用,因为从MainTable到SubTable的Segue创建了一个新的,单独的SubTable实例。

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

class MainTable: UITableViewController { 

} 

class SubTable: UITableViewController { 
    var delegate: delegate? 

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

您正在使用导航控制器? –

+0

您是否尝试过设置代理的自定义初始值设定项?或者在你的SubTable中使用parentViewController? – ohr

你可以通过你的代表对MainTable和创建子表时指定它。创建你的MainTable一个字段来存储它

var subTableDelegate : delegate? 

在MainViewController:

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

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

这工作,谢谢! –