我正在尝试学习如何为我的项目制作详细视图。
我有一个简单的tableView
,其中包含一个简单的Array
数据。
表视图:
我还使用静态tableViewCells
设计了一个详细视图详情视图示例:
我用一个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
答案 0 :(得分:1)
如果我理解你的问题,你只想将dataSource元素传递给下一个viewController。因此,您只需使用indexPath.row
选择它,然后使用sender
参数在prepareForSegue
方法中进行设置。
以下代码假设您的dataSource是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
}
}
修改强>
即时尝试更改数据,例如您在行之间看到的标签 例如,shalvata将拥有与灯塔和灯塔不同的数据 所以,更改标签和图像等等
我还不清楚您想要准确更改哪些数据。此外,我不理解你的截图上的语言,但由于你将关系命名为master-detail,我想第二个屏幕是为了显示有关在第一个屏幕上选择的实体的更多信息。 如果是这样,您应该从设计模型开始,以便它包含您在第二个屏幕上所需的所有字段。从图标来看,它就像是
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
上填写了所有字段的实体列表,然后将所选人员传递到DetailVC
didSelectRowAtIndexPath
MasterVC
所需基本数据(名称,地址,图片)的实体列表,并仅在需要时填写其余字段(didSelectRowAtIndexPath
方法)在任何情况下,您都会在person
中被选中DetailVC
,现在您需要的是在cellForRow
方法中使用该数据,就像您在MasterVC
上所做的那样。也许在详细信息屏幕上使用静态TableViewController是一个更好的选择。
答案 1 :(得分:0)
听起来你正在尝试做的事情根本不涉及segue。您可以使用cellForRow
中的tableViewController
方法更改单元格数据。
https://developer.apple.com/reference/uikit/uitableview/1614983-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上发布具体问题。