带Segue的Master Detail视图



我正在学习如何为我的项目做一个详细的视图。

我有一个简单的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数组,但基本上有两种方法:

  1. 使用MasterVC中填充所有字段的实体列表,并将选定的人传递给didSelectRowAtIndexPath中的DetailVC
  2. 使用MasterVC所需的带有一些基本数据(名称,地址,图像)的实体列表,并仅在需要时填写其余字段(didSelectRowAtIndexPath方法)

在任何情况下,你将在DetailVC中选择person,现在你所需要的就是在cellForRow方法中使用该数据,就像你在MasterVC上所做的那样。也许这将是一个更好的选择使用静态TableViewController的细节屏幕。

听起来你要做的事情根本不涉及segue。您可以使用tableViewController中的cellForRow方法更改单元格的数据。

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上发布具体的问题。

最新更新