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 的评论更新了答案。
我有一个 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 的评论更新了答案。