Swift:当委托人 class 不是直接子代时,分配委托人 class?
Swift: Assign delegate class when delegator class isn't a direct child?
我正在制作一个使用一组向下钻取表的应用程序,每个表都有自己的 TableViewController,所以我的情节提要设置了一个 MainViewController,它有一个 TableViewController (MainTable) 的转场,它有一个转场到另一个 TableViewController(子表)。我创建了一个协议,现在我正在尝试将 SubTable 指定为委托人,将 MainTable 指定为委托人。我发现的所有解决方案仅在直接从委托 class 调用(或转至)委托时才有效,在这种情况下,您可以在 prepareForSegue 方法中使用 SubTable.delegate = self
,但事实并非如此如果从委托 class (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
然后它仍然无法正常工作,因为从 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,并在创建 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
}
我正在制作一个使用一组向下钻取表的应用程序,每个表都有自己的 TableViewController,所以我的情节提要设置了一个 MainViewController,它有一个 TableViewController (MainTable) 的转场,它有一个转场到另一个 TableViewController(子表)。我创建了一个协议,现在我正在尝试将 SubTable 指定为委托人,将 MainTable 指定为委托人。我发现的所有解决方案仅在直接从委托 class 调用(或转至)委托时才有效,在这种情况下,您可以在 prepareForSegue 方法中使用 SubTable.delegate = self
,但事实并非如此如果从委托 class (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
然后它仍然无法正常工作,因为从 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,并在创建 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
}