ios – Working on fetching data from Firebase and displaying it in tableView I need to pass the title value to the second page when press the button


I need to pass the title value associated with the cell from which the button is pressed to the second page and display the title in label.

All my attempts were displaying the value of the last cell in the table and not the address of the cell from which the click was made

class DisplayDataViewController : UIViewController, UITableViewDelegate , UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var spinner: UIActivityIndicatorView!
    
    var dataArray : [MyDataaaaa] = []
    let reuseIdentifier = "DAtaCelllll"
    
    var ref : DatabaseReference!
    
    override func viewDidLoad() {
        tableView.delegate = self
        tableView.dataSource = self
        ref = Database.database().reference()
        
        fetchDataFromFirebase()
        
        // this spinner for out the table view cell
        spinner.startAnimating()
        spinner.isHidden = false
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as? DAtaCelllll
        else {
            return UITableViewCell()
        }
        cell.setValues(data: dataArray[indexPath.row])
        
        
        cell.btn_xx.tag = indexPath.row
        cell.btn_xx.addTarget(self, action: #selector(openNewPage(sender: )), for: .touchUpInside)
        
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 177
    }
    
    // this click on the all cell
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let vc = storyboard?.instantiateViewController(identifier: "TableView_BTN") as? TableView_BTN{
            print("cell index = \(indexPath.row)")
            
            present(vc, animated: true , completion:  nil)
        }
    }
    
    @objc
    func openNewPage (sender : UIButton){
        let VcSecond = storyboard?.instantiateViewController(withIdentifier: "TableView_BTN") as! TableView_BTN
        VcSecond.title_ex = zzzz
        present(VcSecond, animated: true , completion:  nil)
        
        print("button index = \(sender.tag)")
    }
    
    func fetchDataFromFirebase() {
        self.dataArray=[]
        ref.child("TEST_1 gym").child("Info").observeSingleEvent(of: .value, with: {snapshot in
            let enumerator = snapshot.children
            while let rest = enumerator.nextObject()as? FirebaseDatabase.DataSnapshot{
                let value = rest.value as? NSDictionary
                let data = MyDataaaaa.init()
                let url = value?["image"] as? String ?? ""
                let title = value?["title"] as? String ?? ""
                let description = value?["description"] as? String ?? ""
                let value1 = value?["value1"] as? String ?? ""
                let value2 = value?["value2"] as? String ?? ""
                 data.setData(url: url, title: title, description: description ,value1:value1,value2: value2 )
                self.dataArray.append(data)
            }
            self.tableView.reloadData()
            
             self.spinner.startAnimating()
            self.spinner.isHidden = true
        }) {error in
            print (error.localizedDescription)
        }
    }
}

class MyDataaaaa {
    var imageURl : String
    var titleText : String
    var descText : String
    var test1 : String
    var test2 : String  

    init()
    {
        imageURl = ""
        titleText = ""
        descText = ""
        test1 = ""
        test2 = ""    
    } 

    func setData(url : String, title : String, description : String , value1 : String , value2: String ){
        imageURl = url
        titleText = title
        descText = description
        test1 = value1
        test2 = value2
    }
}

class DAtaCelllll : UITableViewCell {
    @IBOutlet weak var dataImageView: UIImageView!
    @IBOutlet weak var dataTitleText: UILabel!
    @IBOutlet weak var dataDescText: UILabel!
    
    @IBOutlet weak var test1: UILabel!
    @IBOutlet weak var test2: UILabel!
    
    @IBOutlet weak var btn_xx: UIButton!
    
    @IBOutlet weak var cellSpinner: UIActivityIndicatorView!
    
    func setValues(data : MyDataaaaa) {
        // this spinner in the image
        cellSpinner.startAnimating()
        cellSpinner.isHidden = false

        dataTitleText.text = data.titleText
        dataDescText.text = data.descText
        let storageRef = Storage.storage().reference(forURL: data.imageURl)
         
        test1.text = data.test1
        test2.text = data.test2
        
        storageRef.getData(maxSize: 28060876) {(data,error) in
            //this spinnper in the image
            self.cellSpinner.startAnimating()
            self.cellSpinner.isHidden = true

            if let err = error {
                print(err)
            } else {
                if let image = data {
                    let myImage : UIImage! = UIImage(data:image)
                    self.dataImageView.image = myImage
                }
            }
        }
    }
}

I want to display the title on the page.

class TableView_BTN: UIViewController  {
    @IBOutlet weak var img_image: UIImageView!
    @IBOutlet weak var lbl_page_view: UILabel!
     
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

Latest articles

spot_imgspot_img

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

spot_imgspot_img