【问题标题】:Pass the myCell.textLabel?.text value via a segue in a dynamic prototype通过动态原型中的 segue 传递 myCell.textLabel?.text 值
【发布时间】:2018-03-11 19:29:18
【问题描述】:

我正在尝试从一个 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()
    }
}

【问题讨论】:

    标签: ios swift uitableview segue


    【解决方案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?
    

    【讨论】:

    • 如果您使用此答案,请阅读我提到其用途的 cmets。
    • 谢谢您的额外修改
    • @JamesJust-Gaming:欢迎 :-)
    【解决方案2】:

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

    var String: labelSelected?
    

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

    refToTableViewCell.labelSelected = youCell.textlabel?.text
    

    【讨论】:

    • 如何在我的第二个 VC 中引用单元格的值?我单击 VC1 中的一个单元格,然后我转到 VC2 并希望在我的 VC2 中显示 VC1 中单元格的文本
    • 我认为我提供的答案完全符合您的要求!
    【解决方案3】:

    如果您在情节提要中设置从一个情节提要到另一个情节提要的转场,则可以在您的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2012-12-26
      • 2014-11-30
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多