我从 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/