通过动态原型中的segue传递myCell.textLabel?.text值

时间:2017-09-29 20:28:33

标签: ios swift uitableview segue

我正试图从一个UITableView转到另一个UITableView。我想segue并将所选单元格的myCell.textLabel?.text值传递给第二个UITableView。

我的第一个UITableView的代码(MenuTypeTableViewController和我的第二个UITableView(TypeItemsTableViewController)的代码也在下面。

我完全清楚这涉及到目前我还没有创建的prepareForSegue函数,纯粹是因为我不确定我在哪里覆盖它以及如何将textLabel值传递给它。

希望我的问题有道理,我会更新建议和编辑。

class MenuTypeTableViewController: UITableViewController, MenuTypeServerProtocol {

    //Properties
    var cellItems: NSArray = NSArray()
    var menuType: MenuTypeModel = MenuTypeModel()

    override func viewDidLoad() {
        super.viewDidLoad()
        let menuTypeServer = MenuTypeServer()
        menuTypeServer.delegate = self
        menuTypeServer.downloadItems()
    }

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

    // MARK: - Table view data source

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

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier: String = "cellType"
        let myCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
        let item: MenuTypeModel = cellItems[indexPath.row] as! MenuTypeModel
        myCell.textLabel?.text = item.type
        return myCell
    }


    func itemsDownloaded(items: NSArray) {
        cellItems = items
        tableView.reloadData()
    }
}



class TypeItemsTableViewController: UITableViewController, TypeItemsServerProtocol {

    //Properties
    var cellItems: NSArray = NSArray()
    var typeItemList: TypeItemsModel = TypeItemsModel()

    override func viewDidLoad() {
        super.viewDidLoad()
        let typeItemsServer = TypeItemsServer()
        typeItemsServer.delegate = self
        typeItemsServer.downloadItems()
    }

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

    // MARK: - Table view data source

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

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier: String = "cellTypeItem"
        let myCell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier)!
        let item: TypeItemsModel = cellItems[indexPath.row] as! TypeItemsModel
        myCell.textLabel?.text = item.name
        return myCell
    }

    func itemsDownloaded(items: NSArray) {
        cellItems = items
        tableView.reloadData()
    }
}

3 个答案:

答案 0 :(得分:1)

您可以尝试以下一组代码,我在您的代码中添加了一些额外的更改来使用它,我希望它能解决您的问题。
我只添加了您需要的额外代码

class TypeItemsTableViewController: UITableViewController, TypeItemsServerProtocol {

// Add this variable in this class and use it whereever you needed it in this class
var selectedItem: String?


override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // Get the selected cell
    let selectedCell = tableView.cellForRow(at: indexPath)

    // Now maintain the text which you want in this class variable
    selectedItem = selectedCell?.textLabel?.text

    // Now perform the segue operation
    performSegue(withIdentifier: "TypeItemsTableViewController", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "TypeItemsTableViewController" {
        let destinationVC = segue.destination as? TypeItemsTableViewController
        destinationVC?.selectedItem = self.selectedItem // Pass the selected item here which we have saved on didSelectRotAt indexPath delegate
    }
}

第二课:

class TypeItemsTableViewController: UITableViewController, TypeItemsServerProtocol {


// Add this variable in this class and use it whereever you needed it in this class
var selectedItem: String?

答案 1 :(得分:0)

您可以做的是在第二个UITableView中创建变量

var String: labelSelected?

然后在你准备segue方法时只需将labelSelected设置为单元格的值。

refToTableViewCell.labelSelected = youCell.textlabel?.text

答案 2 :(得分:0)

如果您在故事板中从一个故事板到另一个故事板中设置segue,则可以在prepareForSegue方法中使用以下代码。您需要将testFromMenuTableViewController属性添加到TypeItemsTableViewController。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? TypeItemsTableViewController,
        let path = self.tableView.indexPathForSelectedRow,
        let cell = self.tableView.cellForRow(at: path),
        let text = cell.textLabel?.text {
        destination.textFromMenuTypeTableViewController = text
    }
}

有关详细信息,请查看this SO answer