2017-07-08 64 views
1

我只能将表格单元格中的用户名称标签传递给另一个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! 

}

+0

User3700449 aceess图像名称从阵列就像串name.ex-:让和imagestring = self.user [indexPath.row] .imageName和, 即将到来的。 profileImage = imageString.you不能直接传递需要传递图像名称的图像,然后在第二个控制器上渲染。 –

回答

0

self.profileImage.self.downloadImage(来自:和imagestring)

0

您可以定义的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) 
} 

希望它能帮助。快乐编码!

+0

我试过了,它没有工作,它把我带到另一个viewcontroller,但它不传递任何图像,我不知道为什么 – user3700449

+0

你得到什么错误? – luckyShubhra

+0

我没有得到任何错误,它运行良好。它只是当我继续时,来自表格单元的图片不会出现在另一个视图控制器中。我得到一张白色的照片。 – user3700449

相关问题