通过动态原型中的segue传递mycell.textlabel.text值



我正在尝试从一个uietableview转到另一个uitableview。我想选择并通过mycell.textlabel?.text值的文本值。

我的第一个UitaiteView的代码(MenutypetableViewController和我的第二个UITATIONVIEW(typeItemstableViewController)的代码也在下面。

我完全意识到这涉及当前我还没有创建的Preparforsegue函数,这纯粹是因为我不确定我在哪里覆盖它以及如何将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()
    }
}

嗨,请尝试以下代码,我在您的代码中添加了一些其他更改,我希望它可以解决您的问题。
我只添加了您需要的额外代码

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?

您可以做的是在第二个Uaithitview

中做一个变量
var String: labelSelected?

然后,您准备选择Segue方法,只需将标记选择为单元格的值即可。

refToTableViewCell.labelSelected = youCell.textlabel?.text

如果从一个故事板到另一个故事板中设置了一个故事板,则可以在Preparforsegue方法中使用以下代码。您需要将testFromenutableViewController属性添加到您的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
    }
}

有关更多信息,请检查此信息。

最新更新