Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从一个viewcontroller';是否将所选单元格添加到上一个viewcontroller?_Swift_Uiviewcontroller_Tableview - Fatal编程技术网

Swift 如何从一个viewcontroller';是否将所选单元格添加到上一个viewcontroller?

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。我应该如何执行此操作 感谢您的帮助使用完成

假设我有两个名为A和B的viewcontroller。在我的viewcontroller B中有一个tableview。当我在tableview中选择一个单元格时,我想将该信息传递回一个单元格

我有一本字典,内容如下:

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委托方法
    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委托方法
    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)之前,在其中设置委托属性