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

标签 php mysql swift xcode uitableview

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

import UIKit

struct User: Codable {
let firstName: String
let lastName: String
let email: String
let userid: String

enum CodingKeys: String, CodingKey {
    case firstName = "first_name"
    case lastName = "last_name"
    case email = "email"
    case userid = "user_id"
}
}

class tableViewCellLabels: UITableViewCell {

@IBOutlet var lbl_firstName: UILabel!
@IBOutlet var lbl_lastName: UILabel!
@IBOutlet var lbl_email: UILabel!
@IBOutlet var lbl_userid: UILabel!

}

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableview1: UITableView!
@IBOutlet var tableview2: UITableView!
private var dataSource = [User]() {
    didSet {
        self.tableview1.reloadData()
    }
}


override func viewDidLoad() {
    super.viewDidLoad()

    self.tableview1.dataSource = self
    self.tableview1.delegate = self

    let url = URL(string: "https://test.netperformers.de/users")

    URLSession.shared.dataTask(with: url!, completionHandler: { [weak self] (data, response, error) in
        guard let data = data, error == nil else {
            print(error?.localizedDescription ?? "An error occurred")
            return
        }

        DispatchQueue.main.async {
            self?.dataSource = try! JSONDecoder().decode([User].self, from: data)
        }
    }).resume()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    tableview1.reloadData()
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "groupCell", for: indexPath) as! tableViewCellLabels
    let user = self.dataSource[indexPath.row]

    cell.lbl_firstName.text = user.firstName
    cell.lbl_lastName.text = user.lastName
    cell.lbl_userid.text = user.userid
    return cell
}
func tableView1(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if tableView == tableView{
        print(dataSource[indexPath.row]) // your clicked user data
    }else{
        // Second Tableview Click Event here
    }

}
}

最佳答案

您不需要第二个 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)
            ])
        }
    
    }
    

关于php - 如何通过 JSON 在 TableView 中按 ID 显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55474317/

相关文章:

php - 如果使用php数据库中没有值,如何显示第一次零值?

php - 生成 future 的日期时间,没有 UNIX 时间戳

javascript - 在其他页面中使用更改的值

php - 根据数据库中另一个下拉菜单中选择的选项更新一个下拉菜单

php - UTF-8贯穿始终

mysql - 如何使用where子句获取mysql中选定行的总和?

php - 如果 PHP 数组的键不作为值存在于另一个数组中,则将其值设置为 0

swift - UIScrollView 显示 subview 不正确

ios - Swift 中的可选绑定(bind)在prepareForSegue 中不起作用

swift - 类型开关模式