Swift 如何从一个viewcontroller';是否将所选单元格添加到上一个viewcontroller?
假设我有两个名为A和B的viewcontroller。在我的viewcontroller B中有一个tableview。当我在tableview中选择一个单元格时,我想将该信息传递回一个单元格 我有一本字典,内容如下:Swift 如何从一个viewcontroller';是否将所选单元格添加到上一个viewcontroller?,swift,uiviewcontroller,tableview,Swift,Uiviewcontroller,Tableview,假设我有两个名为A和B的viewcontroller。在我的viewcontroller B中有一个tableview。当我在tableview中选择一个单元格时,我想将该信息传递回一个单元格 我有一本字典,内容如下: myData = [String: DataModel] 其中,数据模型的形式为 struct DataModel{ var address = "" var name = "" } 我想将B中所选单元格的键发送回A。我应该如何执行此操作 感谢您的帮助使用完成
myData = [String: DataModel]
其中,数据模型的形式为
struct DataModel{
var address = ""
var name = ""
}
我想将B中所选单元格的键发送回A。我应该如何执行此操作
感谢您的帮助使用完成块或使用代理,您可以实现这一点。 使用块可以编写如下代码: 在
bVC
中,为完成块创建一个属性
var cellSelectionCallBackHandler: ((DataModel, Int) -> Void)?
从VC A
设置cellSelectionCallBackHandler
属性
VCObjectB.cellSelectionCallBackHandler = { (data, index) in
// Use your data here
}
从VC B
调用完成处理程序来选择如下单元格
cellSelectionCallBackHandler?(yourData, index)
任何疑问请发表评论。使用完成块或使用委托,您可以实现这一点。 使用块可以编写如下代码: 在
bVC
中,为完成块创建一个属性
var cellSelectionCallBackHandler: ((DataModel, Int) -> Void)?
从VC A
设置cellSelectionCallBackHandler
属性
VCObjectB.cellSelectionCallBackHandler = { (data, index) in
// Use your data here
}
从VC B
调用完成处理程序来选择如下单元格
cellSelectionCallBackHandler?(yourData, index)
任何疑问请发表评论。可以使用委托方法来实现。调用以解除B调用代理的位置/方法。您可以在中实现此委托
您还可以有一个singleton dataHandler类,您可以在其中设置和获取所需的属性,并可以从项目中的任何位置访问它 可以使用委托方法来实现它。调用以解除B调用代理的位置/方法。您可以在中实现此委托 您还可以有一个singleton dataHandler类,您可以在其中设置和获取所需的属性,并可以从项目中的任何位置访问它
类BViewController:
protocol ClassBViewControllerDelegate: class {
func didSelectTableViewCell(onRow row: Int)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SegueIdentifierXYZ" {
if let vc = segue.destination as? ClassBViewController {
vc.delegate = self
}
}
}
BViewController
中创建委托属性:
weak var delegate: ClassBViewControllerDelegate?
func didSelectTableViewCell(onRow row: Int) {
print("Selected table view row is:", row)
}
tableView(u:didSelectRowAt:)
ClassAViewController
其符合ClassBViewControllerDelegate
:
class ClassAViewController: UIViewController, ClassBViewControllerDelegate {
ClassAViewController
和ClassBViewController
绑定到ClassAViewController
中的适当位置,例如,prepareforsque:sender:
protocol ClassBViewControllerDelegate: class {
func didSelectTableViewCell(onRow row: Int)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SegueIdentifierXYZ" {
if let vc = segue.destination as? ClassBViewController {
vc.delegate = self
}
}
}
ClassAViewController
中使用委托合同的委托方法didSelectTableViewCell(onRow-row:Int)
:
weak var delegate: ClassBViewControllerDelegate?
func didSelectTableViewCell(onRow row: Int) {
print("Selected table view row is:", row)
}
类BViewController:
protocol ClassBViewControllerDelegate: class {
func didSelectTableViewCell(onRow row: Int)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SegueIdentifierXYZ" {
if let vc = segue.destination as? ClassBViewController {
vc.delegate = self
}
}
}
BViewController
中创建委托属性:
weak var delegate: ClassBViewControllerDelegate?
func didSelectTableViewCell(onRow row: Int) {
print("Selected table view row is:", row)
}
tableView(u:didSelectRowAt:)
ClassAViewController
其符合ClassBViewControllerDelegate
:
class ClassAViewController: UIViewController, ClassBViewControllerDelegate {
ClassAViewController
和ClassBViewController
绑定到ClassAViewController
中的适当位置,例如,prepareforsque:sender:
protocol ClassBViewControllerDelegate: class {
func didSelectTableViewCell(onRow row: Int)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SegueIdentifierXYZ" {
if let vc = segue.destination as? ClassBViewController {
vc.delegate = self
}
}
}
ClassAViewController
中使用委托合同的委托方法didSelectTableViewCell(onRow-row:Int)
:
weak var delegate: ClassBViewControllerDelegate?
func didSelectTableViewCell(onRow row: Int) {
print("Selected table view row is:", row)
}
使用委托将数据从A传递到B?请检查此链接:。委托和展开序列都在其中应答。使用委托传递数据如何从A到B?检查此链接:。代表和放松阶段都在其中得到了回答。感谢您的快速响应。当我以你为例时,它没有打印任何内容。我怀疑这可能与赛格有关。你介意再给我解释一下吗?nvm知道了。我拿出segue.identifier部分,它就像一个符咒。谢谢。当一个人打算移动到另一个视图控制器,并且正在为视图和控制器使用故事板时,使用Segue。在代码中创建ViewController的情况下,通常在初始化它之后,在呈现ViewController(ViewController,动画:true,完成:nil)或navigationController之前,在其中设置委托属性。pushViewController(ViewController,动画:true)感谢快速响应。当我以你为例时,它没有打印任何内容。我怀疑这可能与赛格有关。你介意再给我解释一下吗?nvm知道了。我拿出segue.identifier部分,它就像一个符咒。谢谢。当一个人打算移动到另一个视图控制器,并且正在为视图和控制器使用故事板时,使用Segue。在代码中创建ViewController的情况下,通常在初始化它之后,在presentViewController(ViewController,动画:true,完成:nil)或navigationController.pushViewController(ViewController,动画:true)之前,在其中设置委托属性