我有一个UITableViewController,它提供一个字符串数组作为数据源:

import UIKit

class ItemsViewController: UITableViewController {

    let items = [
        "Bob",
        "Joe",
    ]

    @IBAction
    func unwindToSegue(segue: UIStoryboardSegue) {

    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Item", forIndexPath: indexPath) as UITableViewCell

        cell.textLabel.text = items[indexPath.row]

        return cell
    }

}

现在,我添加了另一个带有UIViewController的场景,当用户通过show segue单击UITableCell时,该场景被激活。

我现在想将分配给先前UITableCell的字符串并插入ItemViewController:
import UIKit

class ItemViewController: UIViewController {

    @IBOutlet
    weak var nameLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        //var name = segue.someMethodHowIGetTheDataAssignedToTableCell
        //nameLabel.text = name
    }

}

如何将分配给单个TableCell的模型(在这种情况下为字符串)传递给新的ItemViewController

最佳答案

像这样。只需将从ItemViewController的return push segue添加回ItemsViewController。命名它们在将来不太相似:-)

import UIKit

class ItemsViewController: UITableViewController {

    let items = [
        "Bob",
        "Joe",
    ]

    @IBAction
    func unwindToSegue(segue: UIStoryboardSegue) {

    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Item", forIndexPath: indexPath) as UITableViewCell

        cell.textLabel.text = items[indexPath.row]

        return cell
    }

//Passing details to detail VC
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

            let indexPath = self.tableView.indexPathForSelectedRow()
            let theDestination = (segue.destinationViewController as ItemViewController)
            theDestination.itemName = items[indexPath!.row]
    }

}

import UIKit

class ItemViewController: UIViewController {

    @IBOutlet  weak var nameLabel: UILabel!

var itemName = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        nameLabel.text = itemName
    }

}

10-08 18:14