如何将特定用户ID与特定的表格视图单元格相关联?

时间:2017-03-27 18:14:30

标签: swift3 xcode8

我正在创建一个应用程序,其中包含我使用JSON提取的用户的表视图。表视图填充了我想要的所有信息,但我只是在做基本信息。我想要发生的是用户将点击一个表视图单元格,它将把它们带到另一个视图控制器,在该视图控制器中将有一个更详细的配置文件视图。在我的JSON中,当表视图最初加载像UserID等时,我得到所有用户信息,并且我想将该用户ID与每个单独的表格单元相关联,这样当它们被单击时我可以在下一个运行php脚本窗口,用于显示表格中用户的个人资料。

1 个答案:

答案 0 :(得分:0)

我通常这样做的方法是首先将JSON映射到模型对象,并使用表数据源中的那些模型对象来填充表视图。当点击一个单元格时,我进行反向映射(从单元格到模型对象),并且可以将模型对象(或模型对象的信息的子集)转发到prepare(for:sender:)中的下一个视图控制器。为了实现这一点,我在Interface Builder中设置了单元格,以便在选择时触发细节视图控制器。

示例代码:

struct User
{
    let id: String
    let name: String
    // etc.
}

class YourTableViewController: UITableViewController
{
    var users: [User] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        let json = getJSON()
        users = createUsers(from: json)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Check segue.identifier, left out for brevity.
        let destination = segue.destination as! YourDetailsViewController
        let cell = sender as! UITableViewCell
        let indexPath = tableView.indexPath(for: cell)!
        let user = users[indexPath.row]
        destination.user = user
    }

    // ... other funcs for table view ...

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let user = users[indexPath.row]
        // dequeue cell, set up with info from user, return it
    }
}