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")
}
}
你可以通过你的代表对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
}
这工作,谢谢! –
您正在使用导航控制器? –
您是否尝试过设置代理的自定义初始值设定项?或者在你的SubTable中使用parentViewController? – ohr