将选定的行数据传递给下一个 View Controller Swift 3

Posted

技术标签:

【中文标题】将选定的行数据传递给下一个 View Controller Swift 3【英文标题】:Passing selected row data to next View Controller Swift 3 【发布时间】:2018-01-26 17:40:19 【问题描述】:

我是 Swift 编程新手,但遇到了问题。所以我想做的是当用户选择表格中的行时,我想获取所选行的标题,然后将其传递给下一个视图控制器。这是我的第一个视图控制器的代码:

let senderArray = ["Sogyal","Ram"]
let messageArray = ["Hello","What's up?"]

cell.senderName.text = senderArray[indexPath.row]
cell.senderMessage.text = messageArray[indexPath.row]

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    newIndex = indexPath.row

    let selectedMessage = messageArray[indexPath.row]

    let composeVC = ComposeMessageVC()
    composeVC.usernameLbl = selectedMessage

    tableView.deselectRow(at: indexPath, animated: true)
    performSegue(withIdentifier: "goToComposeM", sender: self)

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果您使用 segue,则需要在 prepare(for segue: UIStoryboardSegue, sender: Any?) 中传递数据。所以把你的didSelectRowAt改成这样:

newIndex = indexPath.row

let selectedMessage = messageArray[indexPath.row]

tableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "goToComposeM", sender: selectedMessage)

然后覆盖prepareForSegue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if let vc = segue.destination as? ComposeMessageVC 
        vc.usernameLbl = sender as! String
    

您的方法不起作用,因为您自己创建了一个新的 VC,这与实际呈现的不同。

【讨论】:

我应该在哪里使用覆盖函数? 在您的 VC 中,以及其他功能。 @SogyalThundupSherpa 我在 if let vc = sender.destination as 中遇到错误? ComposeMessageVC vc.usernameLbl = 发件人为!字符串 @SogyalThundupSherpa 哎呀!应该是segue.destination 会是 UILabel 吗?不是字符串?因为当它是标签时出现错误,无法将类型“__NSCFString”(0x10c51e168)的值转换为“UILabel”(0x10a434d68)。【参考方案2】:

你可以试试这样的:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    ...
    let destination = YourViewController()
    destination.usernameLbl = selectedMessage
    navigationController?.pushViewController(destination, animated: true)
    ...

【讨论】:

以上是关于将选定的行数据传递给下一个 View Controller Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Sql 行数据传递给 Vue 文件(Laravel 项目)

objectAtIndex 没有在 segue 中传递选定的行

制作某种具有多行的行构建器并将 JSON 数据传递给其中的最佳方法是啥。扑

当用户在 Table View 行上的选项卡时需要将数据传递给 Watchkit 中的另一个详细界面控制器

如何将ajax上的数据传递给codeigniter控制器

php CodeIgniter将数据传递给View