Swift - 告诉 TableViewController 填充什么数据

Swift - Tell TableViewController what data to populate with

我有一个 table 视图,其中填充了包含用户朋友的单元格。一个单元格,当被选中时,应该拉出那个朋友的个人资料。然而,虽然个人资料视图确实显示了,但我不知道如何告诉它的视图控制器加载那个朋友的个人资料数据。您如何让两个视图控制器相互通信以响应用户操作?提前致谢。

您需要在当前视图控制器中设置 "destination" 视图控制器的 "user" 属性:

在您当前的视图控制器中设置一个 selectedUser 属性:

class CurrentTableViewController: TableViewController {

    var selectedUser: AnyObject?

    ...
}

然后当那个朋友的手机被选中时,在"didSelectRowAtIndexPath"中设置"selectedUser" 属性:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.selectedUser = // get the user property depending on how you're defining your table cells in the first place
    self.performSegueWithIdentifier("pushToUser", sender: self)
}

接下来在您的 prepareForSegue 方法中,定义目标视图控制器并从 "self.selectedUser" 属性:

设置它的 "user" 属性
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "pushToUser") {
        var userProfileTableViewController: UserProfileTableViewController = segue.destinationViewController as UserProfileTableViewController
        userProfileTableViewController.user = self.selectedUser
    }
}

最后,在目标视图控制器(在本例中为 UserProfileTableViewController)中,您可以使用 "self.user".

调用数据库查询等

让我们有两个视图控制器: 目的地VC 和来源VC

在目标中创建可选变量VC 以存储您要在 VC 之间共享的值。

来源VC

  • 覆盖 prepareForSegue 方法
  • 使用segue.destinationViewController获取目的地VC并将返回值存储在变量中,比如destVC
  • 使用所选单元格
  • 中的值初始化 destVC 的可选变量
  • 您可以使用tableview.cellForRowAtIndexPath(tableView.indexPathForSelectedRow())
  • 获取选中的单元格
  • 从所选单元格获取数据并将其分配给 destVC 的变量

然后在目的地VC

  • 在viewDidLoad方法中
  • 检查可选变量是否不为nil
  • 使用变量的值load/update目标VC。

编辑:根据 Mike Taverne 的评论更新了答案。