Ich konnte Benutzernamenbezeichnungen nur aus der Tabellenzelle an einen anderen Viewcontroller übergeben, aber nicht an das Benutzerbild. Ich habe versucht, mit der Vorbereitung für die Funktion segue, wie Sie in meinem Code unten sehen können.Wie übergibt man Benutzerbild von Tablecell an Viewcontroller auf Firebase?
dankimport UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
import FirebaseStorage
class MainVc: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview2: UITableView!
var user = [User]()
override func viewDidLoad() {
super.viewDidLoad()
retrieveUsers()
}
func retrieveUsers() {
let ref = Database.database().reference()
ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { snapshot in
let users = snapshot.value as! [String : AnyObject]
self.user.removeAll()
for (_, value) in users {
if let uid = value["uid"] as? String {
if uid != Auth.auth().currentUser!.uid {
let userToShow = User()
if let fullName = value["full name"] as? String,let businessType = value["Business Type"] as? String, let imagePath = value["urlToImage"] as? String {
userToShow.fullName = fullName
userToShow.businessType = businessType
userToShow.imagePath = imagePath
userToShow.userID = uid
self.user.append(userToShow)
}
}
}
}
self.tableview2.reloadData()
})
ref.removeAllObservers()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let upcoming: ViewController = segue.destination as! ViewController
let indexPath = self.tableview2.indexPathForSelectedRow!
let titleString = self.user[indexPath.row].fullName
let imageView = self.user[indexPath.row].imagePath! // i tried using this to transfer the image from tableview to viewcontroller but its not working
upcoming.imageView = imageView
upcoming.titleString = titleString
self.tableview2.deselectRow(at: indexPath, animated: true)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return user.count ?? 0
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableview2.dequeueReusableCell(withIdentifier: "userCell", for: indexPath) as! UserCell
cell.userNameLbl.text = self.user[indexPath.row].fullName
cell.businessTypeLbl.text = self.user[indexPath.row].businessType
cell.userID = self.user[indexPath.row].userID
cell.userImage.downloadImage(from: self.user[indexPath.row].imagePath!)
return cell
}
}
extension UIImageView {
func downloadImage(from imgURL: String!) {
let url = URLRequest(url: URL(string: imgURL)!)
let task = URLSession.shared.dataTask(with: url) {
(data, response, error) in
if error != nil {
print(error!)
return
}
DispatchQueue.main.async {
self.image = UIImage(data: data!)
}
}
task.resume()
}
}
Klasse Viewcontroller: UIViewController {
@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var testLbl: UILabel!
var titleString: String!
var imageView: String!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.testLbl.text = self.titleString
self.profileImage.image = UIImage(named: imageView!)
}
Import UIKit
class User: NSObject {
var userID: String!
var fullName: String!
var imagePath: String!
var businessType: String!
}
User3700449 aceess Bild Name von Array wie String name.ex-: let image = self.user [indexPath.row] .imageName und kommende . profileImage = imageString.Sie können das Bild nicht direkt übergeben, Sie müssen den Bildnamen übergeben und dann auf dem zweiten Controller rendern. –