ios - 使用 Segue 的主细节 View

标签 ios iphone swift uitableview detailview

我正在尝试学习如何为我的项目创建详细 View 。

我有一个简单的 tableView 和一个简单的 Array 数据来填充它。

表格 View :

TableView Example

我也设计了一个细节View,有static tableViewCells

详细 View 示例:

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

最佳答案

如果我正确理解你的问题,你只是想将 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 数组,但基本上有两种方法:

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

在任何情况下,您都会在 DetailVC 中选择 person,现在您需要做的就是在 cellForRow 方法中使用该数据,只需正如您在 MasterVC 上所做的那样。对于详细信息屏幕,使用静态 TableViewController 可能是更好的选择。

关于ios - 使用 Segue 的主细节 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567162/

相关文章:

ios - iPhone Xs - 使用 AVCaptureVideoPreviewLayer 时,为什么 UIView 的顶部边框和安全区域的顶部边框之间有巨大的填充?

ios - UI 导航栏标题和右栏按钮显示在我拥有的所有 View Controller 中

html - 不针对 iPhone 的 css 媒体查询

ios - 变量的值在 observeSingleEvent 中没有改变

swift - 在闭包中使用无主引用

ios - MapView 相机在 iOS Swift 中没有改变

ios - 为 UIImage 创建 alpha

iphone - 视网膜图像的实际像素尺寸 (iOS)

iphone - 为什么我的 UITableView 在初始化时似乎没有以编辑 = YES 模式启动?

ios - 增加折线图中两个点标签之间的间隙