Php 如何从JSON在TableView中按ID显示数据
我从JSON获取数据,也可以在UITableView中显示它,但是我可以在id=1的位置显示数据吗?就像SQL一样?提前谢谢你的帮助。这是我的密码。我有两个TableView,第一个包含3个用户,第二个应该包含该用户信息,但当我单击一个用户时,它会显示所有用户的所有信息Php 如何从JSON在TableView中按ID显示数据,php,mysql,swift,xcode,uitableview,Php,Mysql,Swift,Xcode,Uitableview,我从JSON获取数据,也可以在UITableView中显示它,但是我可以在id=1的位置显示数据吗?就像SQL一样?提前谢谢你的帮助。这是我的密码。我有两个TableView,第一个包含3个用户,第二个应该包含该用户信息,但当我单击一个用户时,它会显示所有用户的所有信息 import UIKit struct User: Codable { let firstName: String let lastName: String let email: String let userid: Stri
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
}
}
}
在重新加载tableview之前,可以使用过滤器数组来完成此操作
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
}
}
如果您只需要一个特定的用户,您可以像这样过滤数据源:
dataSource.first(where: { $0.userid == "1" })
您不需要第二个
UITableVIew
来显示单个用户
,这不是此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) }
- 创建一个
,以获得一个符合您需要的UI,下面是一个基本示例UIViewController
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) ]) } }
让我知道这是否有帮助。您想按用户id按升序显示数据吗?不是按升序显示,例如,我从JSON获得10个用户,只想显示第三个用户(当然,所有数据在JSON中按id排序),请检查我的答案。MySQL标记与此有什么关系。。Java还有一个支持的类…这很好,谢谢,但是如果我有一个有3个用户的表视图,如果你点击一个用户,应用程序应该只显示该用户的信息呢?这是我的问题,很抱歉我不清楚。@AmedLMAB然后您可以使用UITableView didSelectRowAt委托方法检查来完成它。请更新回答当我单击其中一个时,它仍然显示来自所有用户的信息,可能是因为我有两个swift文件?此代码用于第一个Tableview,第二个Tableview相同,但我仅显示email@AmedLMAB亲爱的,对于多个Tableview或CollectionView,您只能在视图控制器中使用一个委托方法,因此您可以通过给定条件来使用它。请删除第二个委托方法,并使用如下条件处理它。请检查我的更新答案我更新了我的代码,当然它不起作用了…,所以希望你能帮助我我有两个TableView,第一个可以容纳3个用户,第二个应该包含该用户信息,但当我单击一个用户时,它会显示所有用户的所有信息。它很有效,感谢您为该项目提供的帮助,非常感谢。:)嗨,只有一个问题,如果我只想在第一个tableview中显示一个用户怎么办?感谢您的帮助:)@AamirRWithin
URLSession.shared.dataTask
您收到的JSON应该只有一个用户,在表视图中您只能看到该用户,可以这样做吗?如果不是这样,您需要用所需的逻辑进行解释。我的意思是我从JSON获得exp.“Amed,id=1”和“Robin,id=2”,但我只想在第一个表视图中显示“Amed”(第二个表视图中的数据与现在一样)