Swift - передача данных из V C в деталь V C с помощью Firestore - PullRequest
0 голосов
/ 06 августа 2020

Я совершенно новичок в Swift. У меня есть View Controller, где uitableview данных извлекается из Firestore, и я хочу отправить эти данные из View Controller для детализации View Controller. Я имею в виду, что при щелчке по ячейке в View Controller отображается подробный View Controller, такой как имя, описание из Firestore ... Кто-нибудь может мне помочь?

вот HospitalViewController.Swift:

class HospitalViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

struct HospitalData {
    var Name: String = ""
    var Image: String = ""
    var Region: String = ""
    
    func getDic() -> [String:String] {
        let dic = [
            "Name": self.Name,
            "Image": self.Image,
            "Region": self.Region
        ]
        return dic
    }
}

var hospitalArray: Array<HospitalData> = []
    
    @IBOutlet weak var hospitalTableView: UITableView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            
            self.navigationController?.isNavigationBarHidden = true
            
            hospitalTableView.delegate = self
            hospitalTableView.dataSource = self
        }

@IBAction func onBtnRead(_ sender: UIButton) {
    getValueFromList()
}
func getValueFromList() {
    hospitalArray.removeAll() 
    let db = Firestore.firestore()
    
    db.collection("Hospital").getDocuments() { 
        (querySnapshot, err) in
        if let error = err {
            print("fail", error)
        }else{
            print("success")
            
            for document in querySnapshot!.documents {
                print("\(document.documentID) => \(document.data())")
                
                let dataDic = document.data() as NSDictionary
                let Name = dataDic["Name"] as? String ?? ""
                print("Name:", Name)
                let Image = dataDic["Image"] as? String ?? ""
                print("Image:", Image)
                let Region = dataDic["Region"] as? String ?? ""
                print("Region:", Region)
                
                var hospital = HospitalData()
                hospital.Name = Name
                hospital.Image = Image
                hospital.Region = Region
                self.hospitalArray.append(hospital)
                
            }
            
            self.hospitalTableView.reloadData()
        }
    }
}

func setValueIntoList() {
    var hospital = HospitalData()
    hospital.Name = "SUN Hospital"
    hospital.Image = "hospital.png"
    hospital.Region = "Seoul"
    let dic = hospital.getDic()
    let db = Firestore.firestore()
    
    var ref: DocumentReference? = nil
    ref = db.collection("Hospital").addDocument(data: dic) {
        err in
        if let error = err {
            print("fail", error)
        }else{
            print("success", ref!.documentID)
        }
    }
    
}

// mark: datasource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.hospitalArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = hospitalTableView.dequeueReusableCell(withIdentifier: "hosptialTableViewCell", for: indexPath) as! HospitalTableViewCell
    
    let hospitalStruct = self.hospitalArray[indexPath.row]
    cell.labelName.text = hospitalStruct.Name
    cell.labelRegion.text = hospitalStruct.Region
    cell.hospitalImageView.image = UIImage(named: "hospital.png")
    
    return cell
}

1 Ответ

0 голосов
/ 06 августа 2020

Для перехода от одного viewcontroller к другим вы можете использовать базовую c pu sh навигацию, как показано ниже

let viewController = UIStoryboard.init(name: "YOUR_STORYBOARD", bundle: Bundle.main).instantiateViewController(withIdentifier: "YOUR_VC_IDENTIFIER") as? YOUR_VC
self.navigationController?.pushViewController(viewController, animated: true)

Теперь, чтобы передать данные из одного представления в viewcontroller, вы должны если вы хотите переместить, вам нужно объявить переменную на viewcontroller, которую вы хотите переместить.

т.е. вам необходимо иметь переменную в вашей детали v c.

hospital_detail_v c .swift

var hospitalData: HospitalData?

Теперь вам нужно передать данные / переменную, как показано ниже, через навигацию в методе TableView didSelectRowAt, как показано ниже.

let viewController = UIStoryboard.init(name: "YOUR_STORYBOARD", bundle: Bundle.main).instantiateViewController(withIdentifier: "YOUR_VC_IDENTIFIER") as? YOUR_VC 
viewController.hospitalData = self.hospitalArray[indexPath.row]
self.navigationController?.pushViewController(viewController, animated: true)

Удачного кодирования :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...