我正在学习如何为我的项目做一个详细的视图。
我有一个简单的tableView
和一个简单的Array
数据来填充它。
Table View:
TableView例子
我还设计了一个细节视图,使用静态tableViewCells
详细视图示例:
例子我用segue连接了两者:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("Profile", sender: indexPath);
}
我还将所有的标签和图像与Outlets
连接起来,我想在每个cell
之间改变,但我不知道如何从这里前进。
现在每个cell
显示相同的东西,但我想改变行之间的data
。我想通过segue改变data
创建一个master detail应用,就像tableview一样。有人能帮我吗?
我使用Swift 2.3和Xcode 8.1
如果我正确理解你的问题,你只是想传递数据源元素到下一个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
}
}
编辑
我试图更改数据,如所有的标签,你看到的行之间,如例如,沙瓦塔将有一个不同的数据从灯塔和因此,更改标签和图像等
我还不清楚你到底想要更改哪些数据。另外,我不理解你的屏幕截图上的语言,但既然你把关系命名为主-细节,我想第二个屏幕是为了显示更多关于第一个屏幕上选择的实体的信息。如果是这样,您应该从设计模型开始,以便它包含第二个屏幕上所需的所有字段。从图标来看,应该是
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的细节屏幕。
听起来你要做的事情根本不涉及segue。您可以使用tableViewController
中的cellForRow
方法更改单元格的数据。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "foo"
return cell
}
如果这听起来让你感到困惑,那么你应该后退一步,做一些教程,然后在SO上发布具体的问题。