在Swift中的TableView之间传递数据

时间:2016-10-01 16:06:19

标签: swift uitableview

我在我的项目中运行了两个tableView。我正在尝试将第一个tableViewcell数据传递(复制)到第二个tableView.I,使用tableView行动方法传递数据。我的部分代码如下...

第一个VC:

var tableView: UITableView!
var DataArray = ["Bus","Helicopter","Truck","Boat","Bicycle","Motorcycle","Plane","Train","Car","S    cooter","Caravan"]
var sendSelectedData = NSString()

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

let copyAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Pass Data") { (UITableViewRowAction, NSIndexPath) -> Void in

print("Button Pressed") // Xcode Console prints **Button Pressed** when swipe action performed.

self.performSegue(withIdentifier: "send", sender: self)

 }

return [copyAction]
 }


func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    self.performSegue(withIdentifier: "send", sender: self)
    // segue.destination as! tableController

    let indexPath = tableView.indexPathForSelectedRow
    let currentCell =  tableView.cellForRow(at: indexPath!)!
    self.sendSelectedData = (currentCell.textLabel?.text)! as String as NSString

    let viewController = segue.destination as! tableController
    viewController.labelcell = ([self.sendSelectedData as String])
    print(self.sendSelectedData)  // no result
}

第二个VC:

var labelcell = [String]()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath as IndexPath) as UITableViewCell


    cell.textLabel?.text = labelcell[indexPath.row] as? String

    tableView.reloadData()

    return cell
}

上面的代码看起来像是将数据传递给我的第二个VC(segue)。但是,我只是得到一个空的tableview ..

1 个答案:

答案 0 :(得分:1)

好的,经过测试,结果证明你使用了不正确的prepareForSegue功能。你没有使用“prepareForSegue”,你是创建一个名为prepareForSegue的函数 - 因为Swift 3中的语法已经改变了。这个将被调用,你可以传递数据。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "send" {

        let selectedIndex = sender as! NSIndexPath
        let currentCell =  tableView.cellForRow(at: selectedIndex as IndexPath)! as! Cell
        self.sendSelectedData = (currentCell.label?.text)! as String as NSString

        print(self.sendSelectedData) // till here it worked for me - it is filled with my label.text
        // I don't know what this is "viewController.labelcell", so you have to to know how to go on from here on

        viewController.labelcell = ([self.sendSelectedData as String])           
    }
}

您还需要传递indexPath:

self.performSegue(withIdentifier: "send", sender: indexPath)

完全像这样:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let copyAction = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Pass Data") { (UITableViewRowAction, NSIndexPath) -> Void in

        print("editActionsForRowAt called") // Xcode Console prints **Button Pressed** when swipe action performed.
        self.performSegue(withIdentifier: "send", sender: indexPath)

    }

    return [copyAction]
}

这在我的测试项目中有效。

另外要注意:Cell是我创建的UITableViewCell的自定义子类,标签是我的测试项目的标签元素的UIOutlet