Я уже искал некоторые ответы, которые были заданы по этому поводу, но ни один из них, похоже, не подходит / не работает в моей ситуации, поэтому я решил спросить сообщество.Я просто пытаюсь передать данные из ячейки табличного представления в следующий контроллер представления.Я дошел до возможности точного отображения информации в моих ячейках, однако, когда я выбираю строку, он просто показывает контроллер представления без информации
Я пытался установить метки и изображения на любой UITableViewCellможет показывать но это не работает.Я создал класс NSObject, который определяет переменные, поэтому меня смущает вопрос о том, как передавать данные в контроллер следующего представления.
Это мой AddFriendViewController, где я выбираю пользователей из Firebase, и он отображаетмоя информация о табличном виде
class AddFriendViewController: UIViewController {
var users = [Users]()
var databaseRef = Database.database().reference()
@IBOutlet weak var friendsTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
friendsTableView.delegate = self
friendsTableView.dataSource = self
fetchUser()
}
func fetchUser() {
databaseRef.child("users").observe(.childAdded) { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = Users()
user.nameOfUser = dictionary["nameOfUser"] as? String ?? ""
user.email = dictionary["email"] as? String ?? ""
user.profileImageURL = dictionary["profileImageURL"] as? String ?? ""
self.users.append(user)
DispatchQueue.main.async {
self.friendsTableView.reloadData()
}
}
}
}
}
extension AddFriendViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.users.count
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let friendCell = UITableViewCell(style: .subtitle, reuseIdentifier: "friendCell")
let user = users[indexPath.row]
friendCell.textLabel?.text = user.nameOfUser
friendCell.detailTextLabel?.text = user.email
if let profileImageURL = user.profileImageURL {
let url = URL(string: profileImageURL)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error)
return
}
DispatchQueue.main.async {
friendCell.imageView?.image = UIImage(data: data!)
}
}.resume()
}
return friendCell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFriendProfile", sender: self.users[indexPath.row])
self.friendsTableView.deselectRow(at: indexPath as IndexPath, animated: true)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showFriendProfile" {
if let indexPath = friendsTableView.indexPathForSelectedRow {
let dvc = segue.destination as! DetailViewController
***This is where I am confused as to what I should be doing***
//EDIT1:
print("The nameOfUser is \(user.nameOfUser!)")
print("The email is \(user.email!)")
}
}
}
}
Это мой класс пользователей:
class Users: NSDictionary {
var nameOfUser: String?
var email: String?
var profileImageURL: String?
}
Это мой DetailViewController:
class DetailViewController: UIViewController {
var nameOfUser = String()
var email = String()
var profileImageURL = UIImage()
var ref: DatabaseReference?
@IBOutlet weak var profileImageView: UIImageView!
@IBOutlet weak var nameOfUserLabel: UILabel!
@IBOutlet weak var emailLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
nameOfUser = nameOfUserLabel.text!
email = emailLabel.text!
profileImageURL = profileImageView.image!
}
}
Очевидная цель - просто нажатьв ячейке, чтобы показать данные на следующем контроллере представления.Я понимаю, что подобные вопросы задавались в прошлом, но я действительно не знаю, как использовать их в качестве решения моей проблемы.Буду очень признателен за любую помощь, и, пожалуйста, дайте мне знать, если есть что-то, что мне нужно уточнить.
РЕДАКТИРОВАТЬ1: Я добавил оператор печати в функцию подготовки к переходу и заметил, что это по крайней мере извлекает информацию, но дляпо какой-то причине не передать его следующему контроллеру представления.
Спасибо