如何通过JSON在TableView中按ID显示数据

时间:2019-04-02 12:02:57

标签: php mysql swift xcode uitableview

我从JSON获取数据,也可以在UITableView中显示它,但是例如可以显示id为= 1的数据吗?就像SQL一样?预先感谢您的帮助。这是我的代码。我有2个TableView,第一个拥有3个用户,第二个应该具有该用户信息,但是当我单击一个用户时,它将显示所有用户的所有信息。

MailItem.Display(True)

4 个答案:

答案 0 :(得分:1)

您不需要第二个UITableVIew来显示单个User,这不是此ui控件的正确目的,而是可以执行以下操作之一:

  • UIAlertController显示用户信息

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let user = self.dataSource[indexPath.row]
    
        let alertController = UIAlertController(title: user.firstName + " " + user.lastName, message: user.email, preferredStyle: .alert)
        let action = UIAlertAction(title: "OK", style: .default)
        alertController.addAction(action)
        self.present(alertController, animated: true, completion: nil)
    }
    
  • 创建一个UIViewController使其具有符合您需求的UI,以下是一个基本示例

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let user = self.dataSource[indexPath.row]
        let userVC = UserViewController(user: user)
        self.navigationController?.pushViewController(userVC, animated: true)
    }
    
    class UserViewController: UIViewController {
    
        private let user: User
    
        init(user: User) {
            self.user = user
            super.init(nibName: nil, bundle: nil)
        }
    
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.view.backgroundColor = .white
    
            let nameLabel = UILabel()
            nameLabel.text = self.user.firstName + " " + self.user.lastName
            nameLabel.translatesAutoresizingMaskIntoConstraints = false
            self.view.addSubview(nameLabel)
    
            let emailLabel = UILabel()
            emailLabel.text = self.user.email
            emailLabel.translatesAutoresizingMaskIntoConstraints = false
            self.view.addSubview(emailLabel)
    
            let safeAreaGuide = self.view.safeAreaLayoutGuide
            NSLayoutConstraint.activate([
                nameLabel.topAnchor.constraint(equalTo: safeAreaGuide.topAnchor, constant: 16.0),
                nameLabel.leadingAnchor.constraint(equalTo: safeAreaGuide.leadingAnchor, constant: 16.0),
                nameLabel.trailingAnchor.constraint(equalTo: safeAreaGuide.trailingAnchor, constant: 16.0),
    
                emailLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 8.0),
                emailLabel.leadingAnchor.constraint(equalTo: safeAreaGuide.leadingAnchor, constant: 16.0),
                emailLabel.trailingAnchor.constraint(equalTo: safeAreaGuide.trailingAnchor, constant: 16.0)
            ])
        }
    
    }
    

答案 1 :(得分:0)

您可以在重新加载表格视图之前使用过滤器数组进行操作。

private var dataSource = [User]() {
    didSet {
        dataSource = dataSource.filter({ (item) -> Bool in
            return item.userid == "3" // put your filter query here
        })
        self.tableview.reloadData()
    }
}

点击事件

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if tableView == YourFirstTable {
        print(dataSource[indexPath.row]) // your clicked user data
    } else {
        // Second Tableview Click Event here
    }

}

答案 2 :(得分:0)

如果您只需要特定的用户,则可以像这样过滤数据源:

dataSource.first(where: { $0.userid == "1" })

答案 3 :(得分:0)

使用标题部分。因此,所有节标题都将列出用户。在每个部分的行单元格中,您可以显示该特定用户的信息。您还可以管理行的高度,以管理显示隐藏功能。

让我知道这是否有帮助。