我从JSON获取数据,也可以在UITableView中显示它,但是例如可以显示id为= 1的数据吗?就像SQL一样?预先感谢您的帮助。这是我的代码。我有2个TableView,第一个拥有3个用户,第二个应该具有该用户信息,但是当我单击一个用户时,它将显示所有用户的所有信息。
MailItem.Display(True)
答案 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)
使用标题部分。因此,所有节标题都将列出用户。在每个部分的行单元格中,您可以显示该特定用户的信息。您还可以管理行的高度,以管理显示隐藏功能。
让我知道这是否有帮助。