我正在尝试学习如何为我的项目创建详细 View 。
我有一个简单的 tableView
和一个简单的 Array
数据来填充它。
表格 View :
我也设计了一个细节View,有static tableViewCells
详细 View 示例:
我已经用 segue 连接了两者:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("Profile", sender: indexPath);
}
我还将所有标签和图像与 Outlets
连接起来,我想在每个 cell
之间进行更改,但我不知道如何从这里前进。
现在每个 cell
都显示相同的内容,但我想更改行之间的 data
。所以我想通过 segue 更改 data
并创建一个主细节应用程序,就像在我的 tableview 中一样。谁能帮帮我?
我正在使用 Swift 2.3 和 Xcode 8.1
最佳答案
如果我正确理解你的问题,你只是想将 dataSource 元素传递给下一个 viewController。因此,您可以使用 indexPath.row
选择它,并使用 sender
参数在 prepareForSegue
方法中设置它。
下面的代码假定您的数据源是 self.users
数组。
swift 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
}
}
swift 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
}
}
编辑
im trying to change data like al the labels you saw between rows like for example shalvata will have a different data from light house and so , change the labels and images and so on
我还不清楚你到底想改变什么数据。另外我不明白你的屏幕截图上的语言,但由于你将关系命名为主从关系,我想第二个屏幕是为了显示有关在第一个屏幕上选择的实体的更多信息。 如果是这样,您应该从设计模型开始,使其包含您在第二个屏幕上需要的所有字段。从图标来看应该是这样的
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 可能是更好的选择。
关于ios - 使用 Segue 的主细节 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567162/