2017-07-08 53 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

相關問題