ios - 数据传递失败

标签 ios swift uitableview uiviewcontroller

在我的 tableview.swift 中,我将用户配置文件加载到单元格中。当用户选择这些单元格之一时,他们将被重定向到 mainProfile.swift,在那里他们可以看到所选的用户配置文件。在阅读了几篇文章后,我在 tableview.swift 中设置了这段代码,但它仍然没有将从 tableview 的单元格中捕获的数据传递到 mainProfile

var mainProfile: mainProfile?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let user1 = self.users[indexPath.row]
    mainProfile?.user2 = user1
    print(mainProfile?.user2 as Any)
    performSegue(withIdentifier: "mainProfile", sender: self)

}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "mainProfile" {
        let viewControllerAccept = segue.destination as! mainProfile
        let user2 = sender as Any?
        viewControllerAccept.user2 = user2 as! User?
    }
}

最佳答案

您应该简化 didSelectRowAt 以仅执行 segue:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "mainProfile", sender: self)    
}

(或者完全删除这个方法,直接将转场添加到 Storyboard中的单元格原型(prototype)。)

然后,将 prepare(segue:) 更改为使用 indexPathForSelectedRow 来了解选择了哪一行:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "mainProfile" {
        let indexPath = tableView.indexPathForSelectedRow!
        let viewController = segue.destination as! MainProfileViewController
        viewController.user2 = users[indexPath.row]
    }
}

关于ios - 数据传递失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41556736/

相关文章:

ios - 我们如何使用带有 iOS GLKTextureLoader 的 RGB565 格式的纹理?

ios - map View - 移动 map View 后的当前位置

ios - Xcode Charles(HTTP 代理)不捕获本地主机流量

swift - 使用 `Self` 作为参数的方法键入删除

iphone - UITableviewCell 意外更改

objective-c - 之间的区别 – initWithRequest :delegate: and +connectionWithRequest:delegate

swift - 如何处理闭包递归

ios - Web 服务值未出现在标签中

iphone - 选择 UITableView 的多行

ios - 删除行前的确认