2017-07-08 2 views
1

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?

dank
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() 
    } 


    } 

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! 

}

+0

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. –

Antwort

0

self.profileImage.self.downloadImage (aus: image)

0

Sie können UIImage oder imag definieren e Name Eigentum in Ihrem ViewController und greifen Sie von Ihrem MainVc darauf zu. Ich habe den Bildnamen unten angegeben.

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) 
} 

und übergeben Bild Name in Ihrer Vorbereitung für Segue als

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) 
} 

Hoffe, es hilft. Glückliche Kodierung !!

+0

Ich habe es versucht, es hat nicht funktioniert, es bringt mich zum anderen Viewcontroller aber es passiert kein Bild, ich weiß nicht warum – user3700449

+0

Welchen Fehler bekommen Sie? – luckyShubhra

+0

Ich bekomme keinen Fehler es läuft ok. Es ist nur so, dass das Bild von der Tischzelle nicht in dem anderen Viewcontroller erscheint, wenn ich segne. Ich bekomme ein weißes Bild. – user3700449

Verwandte Themen