如何将用户图像从Tablecell传递给Firebase上的Viewcontroller?
我只能将表格单元格中的用户名称标签传递给另一个ViewController,而不是用户图像。我尝试使用准备segue函数,你可以在下面的代码中看到。感谢如何将用户图像从Tablecell传递给Firebase上的Viewcontroller?
import 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()
}
}
类的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!)
}
进口的UIKit
类用户:NSObject的{
var userID: String!
var fullName: String!
var imagePath: String!
var businessType: String!
}
self.profileImage.self.downloadImage(来自:和imagestring)
您可以定义的UIImage或IMAG在您的ViewController
中输入名称,然后从您的MainVc
访问。我已经通过下面的图像名称。
class ViewController: UIViewController {
@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var testLbl: UILabel!
var titleString: String!
var yourImageName:String!
override func viewDidLoad() {
super.viewDidLoad()
self.testLbl.text = self.titleString
self.imageview.image = UIImage(named:yourImageName)
}
,并通过图像名称在您的赛格瑞准备为
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let upcoming: ViewController = segue.destination as! ViewController
let indexPath = self.tableview.indexPathForSelectedRow!
let titleString = self.user[indexPath.row].fullName
let imageName = self.user[indexPath.row].imagename // access image name from user array
upcoming.titleString = titleString
upcoming.yourImageName = imageName
// here i want to pass user image as welH from cell to the viewcontroller
self.tableview.deselectRow(at: indexPath, animated: true)
}
希望它能帮助。快乐编码!
我试过了,它没有工作,它把我带到另一个viewcontroller,但它不传递任何图像,我不知道为什么 – user3700449
你得到什么错误? – luckyShubhra
我没有得到任何错误,它运行良好。它只是当我继续时,来自表格单元的图片不会出现在另一个视图控制器中。我得到一张白色的照片。 – user3700449
User3700449 aceess图像名称从阵列就像串name.ex-:让和imagestring = self.user [indexPath.row] .imageName和, 即将到来的。 profileImage = imageString.you不能直接传递需要传递图像名称的图像,然后在第二个控制器上渲染。 –