与Segue的主要细节视图

时间:2016-11-12 20:10:42

标签: ios iphone swift uitableview detailview

我正在尝试学习如何为我的项目制作详细视图。

我有一个简单的tableView,其中包含一个简单的Array数据。

表视图:

TableView Example

我还使用静态tableViewCells

设计了一个详细视图

详情视图示例:

Example

我用一个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

2 个答案:

答案 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数组的方式和时间,但基本上有两种方法:

  1. 使用MasterVC上填写了所有字段的实体列表,然后将所选人员传递到DetailVC
  2. 中的didSelectRowAtIndexPath
  3. 使用包含MasterVC所需基本数据(名称,地址,图片)的实体列表,并仅在需要时填写其余字段(didSelectRowAtIndexPath方法)
  4. 在任何情况下,您都会在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上发布具体问题。