如果我正确理解您的问题,您只想将 dataSource 元素传递给下一个 viewController。因此,您可以使用indexPath.row 选择它并使用sender 参数在prepareForSegue 方法中设置它。
下面的代码假设您的数据源是self.users 数组。
斯威夫特 3
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let user = self.users[indexPath.row]
self.performSegueWithIdentifier("Profile", sender: user)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let segueId = segue.identifier? else { return }
if segueId == "Profile" {
guard let profileVC = segue.destination as? ProfileViewController else { return }
profileVC.user = sender as? User
}
}
斯威夫特 2
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let user = self.users[indexPath.row]
self.performSegueWithIdentifier("Profile", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
guard let segueId = segue.identifier else { return }
if segueId == "Profile" {
guard let profileVC = segue.destinationViewController as? ProfileViewController else { return }
profileVC.user = sender as? User
}
}
编辑
我正在尝试更改数据,例如您在行之间看到的所有标签,例如
例如,shalvata 将具有与灯塔不同的数据,并且
所以,改变标签和图像等等
我仍然不清楚您要确切更改哪些数据。此外,我不理解您的屏幕截图中的语言,但由于您将关系命名为主从关系,我想第二个屏幕旨在显示有关在第一个屏幕上选择的实体的更多信息。
如果是这样,您应该从设计模型开始,使其包含您在第二个屏幕上需要的所有字段。从图标来看,它会是这样的
struct Person {
var name: String?
var image: UIImage?
var age: Int?
var address: String?
var phone: String?
var schedule: String?
var music: String?
var smoking: Bool?
var car: String?
var info: String?
var hobby: String?
}
注意:删除那些不是可选字段的?,即必须始终为每个实体设置(可能是name字段)
用法
我不知道您如何以及何时创建Person 数组,但基本上有两种方法:
- 使用在
MasterVC 上填写所有字段的实体列表,然后将所选人员传递给didSelectRowAtIndexPath 中的DetailVC
- 使用包含
MasterVC 所需的一些基本数据(名称、地址、图像)的实体列表,并仅在需要时填写其余字段(didSelectRowAtIndexPath 方法)
无论如何,您将在DetailVC 中被选中person,现在您需要在cellForRow 方法中使用该数据,就像您在MasterVC 上所做的那样。也许将静态 TableViewController 用于详细信息屏幕会是一个更好的选择。