ios - how to pass the data back from table view cell to table view class? -


in had 3 sections in need last section tableviewcell data needs pass table view class , 1 in first section having radio button whenever got enabled third section needs shown on table view if not should hided

table view class

    let url = "http://www.json-generator.com/api/json/get/bmlqrpbjgw?indent=2"     let urlstring = "http://www.json-generator.com/api/json/get/bvwkkhtwbm?indent=2"     var shippingarray :[[string: anyobject]] = []     var keys = [string]()     let myactivityindicator = uiactivityindicatorview(activityindicatorstyle: uiactivityindicatorviewstyle.gray)     var arrayss =  [string:anyobject]()     var checkisradioselect = [int]()     var checkisbuttonenable = [int]()     var checkispaymentradioselect = [int]()     let response : [int] = []     var chekindex:indexpath?     var selected: bool = true     var dataarray :[any] = []     var a: [any] = []     var b: [any] = []      override func viewdidload() {         super.viewdidload()         _ = uiapplication.shared.statusbarorientation         tabledetails.ishidden = true         continuebutton.layer.cornerradius = 5         myactivityindicator.frame = cgrect(x: 130, y: 320, width: 30, height: 30)         myactivityindicator.hideswhenstopped = true         myactivityindicator.startanimating()         view.addsubview(myactivityindicator)         myactivityindicator.translatesautoresizingmaskintoconstraints = false         let horizontalconstraint = nslayoutconstraint(item: myactivityindicator, attribute: nslayoutattribute.centerx, relatedby: nslayoutrelation.equal, toitem: view, attribute: nslayoutattribute.centerx, multiplier: 1, constant: 0)         view.addconstraint(horizontalconstraint)         let verticalconstraint = nslayoutconstraint(item: myactivityindicator, attribute: nslayoutattribute.centery, relatedby: nslayoutrelation.equal, toitem: view, attribute: nslayoutattribute.centery, multiplier: 1, constant: 0)         view.addconstraint(verticalconstraint)         self.shippingaddressurl()         tabledetails.delegate = self         tabledetails.datasource = self         tabledetails.separatorinset = uiedgeinsets.zero         tabledetails.rowheight = uitableviewautomaticdimension         tabledetails.estimatedrowheight = 50         self.title = "checkout"         // additional setup after loading view.     }       func shippingaddressurl() {         let url = nsurl(string: self.url)         urlsession.shared.datatask(with: (url url?)!, completionhandler: {(data, response, error) -> void in             if let jsonobj = try? jsonserialization.jsonobject(with: data!, options: .allowfragments) as? nsdictionary {             self.shippingarray = (jsonobj!.value(forkey: "address") as? [[string: anyobject]])!                 operationqueue.main.addoperation({                     self.tabledetails.reloaddata()                 })             }         }).resume()     }     @ibaction func selectradiobutton(_ sender: kgradiobutton) {         let chekindex = self.checkisradioselect.index(of: sender.tag)         _ = self.checkisbuttonenable.index(of: sender.tag)         if sender.isselected {          } else{             if(chekindex == nil){                 self.checkisradioselect.removeall(keepingcapacity: false)                 self.checkisradioselect.append(sender.tag)                 self.checkisbuttonenable.removeall(keepingcapacity: false)                 self.checkisbuttonenable.append(sender.tag)                 self.tabledetails.reloaddata()             }         }     }     func numberofsections(in tableview: uitableview) -> int{         return 3     }     func tableview(_ tableview: uitableview, titleforheaderinsection section: int) -> string? {         if (section == 0){             return "shipping address"         }         else if (section == 2){             return "shipping method"         }         else{             return ""         }     }     func tableview(_ tableview: uitableview, heightforrowat indexpath: indexpath) -> cgfloat{         if (indexpath.section == 0){             return uitableviewautomaticdimension         }         else if (indexpath.section == 1){             return 62         }         else {             return 282         }     }      func tableview(_ tableview: uitableview, willdisplayheaderview view: uiview, forsection section: int){         let header = view as! uitableviewheaderfooterview         header.textlabel?.textcolor = uicolor.gray         header.textlabel?.textalignment = nstextalignment.center         header.textlabel?.font = uifont(name: "futura", size: 17)     }      @ibaction func newaddressaction(_ sender: any) {         let storyboard = uistoryboard(name: "main", bundle: nil)         let addtocartvc = storyboard.instantiateviewcontroller(withidentifier: "newaddress") as! newaddressviewcontroller         self.navigationcontroller?.pushviewcontroller(addtocartvc, animated: true)     }     func tableview(_ tableview: uitableview, numberofrowsinsection section: int) -> int{         if (section == 0){             return shippingarray.count         }         else {             return 1         }     }     @ibaction func continuebuttonaction(_ sender: any) {         if selected == false{             let radiobutton = sclalertview()             _ =  radiobutton.showerror("warning", subtitle: "please select shipping method", closebuttontitle: "ok")          }else{             let storyboard = uistoryboard(name: "main", bundle: nil)             let addtocartvc = storyboard.instantiateviewcontroller(withidentifier: "payment") as! paymentmethodviewcontroller             self.navigationcontroller?.pushviewcontroller(addtocartvc, animated: true)         }     }     @ibaction func deleteaction(_ sender: uibutton) {         shippingarray.remove(at:sender.tag)         self.tabledetails.reloaddata()     }     func tableview(_ tableview: uitableview, cellforrowat indexpath: indexpath) -> uitableviewcell {         if (indexpath.section == 0)         {             let cell = tableview.dequeuereusablecell(withidentifier: "cell", for: indexpath) as! addresstableviewcell             tabledetails.ishidden = false             myactivityindicator.stopanimating()             let arr = shippingarray[indexpath.row]             cell.deletebutton.tag = indexpath.row             cell.namelabel.text = arr["name"] as? string             cell.addresslabel.text = arr["address"]as? string             let mobilenumber : =  arr["number"] anyobject             cell.mobilenumberlabel.text = "\(mobilenumber)"             cell.radiobutton.tag = indexpath.row             cell.editbutton.tag = indexpath.row             cell.deletebutton.tag = indexpath.row             cell.editbutton.ishidden = true             cell.deletebutton.ishidden = true             let checkindex = self.checkisradioselect.index(of: indexpath.row)             if(checkindex != nil){                 cell.radiobutton.isselected = true                 cell.editbutton.ishidden = false                 cell.deletebutton.ishidden = false             }else             {                 cell.radiobutton.isselected = false                 cell.editbutton.ishidden = true                 cell.deletebutton.ishidden = true             }             return cell         }         else if (indexpath.section == 1){             let cell = tableview.dequeuereusablecell(withidentifier: "addresscell", for: indexpath) as! createnewaddresstableviewcell             cell.newaddressbutton.addtarget(self, action: #selector(newaddressaction(_:)), for: .touchupinside)             return cell         }         else {             let cell = tableview.dequeuereusablecell(withidentifier: "shippingmethodcell", for: indexpath) as! methodtableviewcell             return cell         }     } 

table view cell class

   var chekindex:indexpath?     var arrayss =  [string:anyobject]()     var keys = [string]()     let urlstring = "http://www.json-generator.com/api/json/get/bvgbyvqgmq?indent=2"      override func awakefromnib() {         super.awakefromnib()         self.shippingmethodurl()         shippingtableview.delegate = self         shippingtableview.datasource = self         shippingtableview.rowheight = uitableviewautomaticdimension         shippingtableview.estimatedrowheight = shippingtableview.rowheight         // initialization code     }     @ibaction func paymentradioaction(_ sender: kgradiobutton) {         _ = sender.center         let centralpoint = sender.superview?.convert(sender.center, to:self.shippingtableview)         let indexpath =  self.shippingtableview.indexpathforrow(at: centralpoint!)         if sender.isselected {          } else{             chekindex = indexpath             isselected = true             self.shippingtableview.reloaddata()         }     }     func shippingmethodurl() {         let url = nsurl(string: self.urlstring)         urlsession.shared.datatask(with: (url url?)!, completionhandler: {(data, response, error) -> void in             if let jsonobj = try? jsonserialization.jsonobject(with: data!, options: .allowfragments) as? nsdictionary {                 self.arrayss = jsonobj as! [string : anyobject]                 print(self.arrayss)                 self.keys = jsonobj?.allkeys as! [string]                 print(self.keys)                 operationqueue.main.addoperation({                     self.shippingtableview.reloaddata()                     let sectionheight = self.arrayss.count * 31                     let cellheight = self.keys.count * 44                     self.shippingheightconstraint.constant = cgfloat(sectionheight + cellheight)                 })             }         }).resume()     }      func numberofsections(in tableview: uitableview) -> int{         return arrayss.count     }     func tableview(_ tableview: uitableview, titleforheaderinsection section: int) -> string? {         return self.keys[section]     }     func tableview(_ tableview: uitableview, willdisplayheaderview view: uiview, forsection section: int){         let header = view as! uitableviewheaderfooterview         header.tintcolor = uicolor.white         header.textlabel?.textcolor = uicolor.darkgray         header.textlabel?.textalignment = nstextalignment.left         header.textlabel?.font = uifont(name: "futura", size: 17)     }     func tableview(_ tableview: uitableview, numberofrowsinsection section: int) -> int{         let key = self.keys[section]         let :[any]  = arrayss[key] as! [any]         return a.count     }      func tableview(_ tableview: uitableview, cellforrowat indexpath: indexpath) -> uitableviewcell {         let cell = tableview.dequeuereusablecell(withidentifier: "shippingcell", for: indexpath) as! shippingmethodtableviewcell         let bgcolorview = uiview()         bgcolorview.backgroundcolor = uicolor.white         cell.selectedbackgroundview = bgcolorview         let key = self.keys[indexpath.section]         var :[any]  = arrayss[key] as! [any]         var dictionary = a[indexpath.row] as! [string:any]         let name = dictionary["name"]         let price = dictionary ["price"]         cell.methodlabel.text = name  as? string         cell.pricelabel.text = price as? string         cell.radiobutton.addtarget(self, action: #selector(paymentradioaction), for: .touchupinside)         if chekindex == indexpath {             cell.radiobutton.isselected = true         } else {             cell.radiobutton.isselected = false         }         return cell     } 

and layout shown here

enter image description here

var addressselected : bool = false  @ibaction func selectradiobutton(_ sender: kgradiobutton) {     let chekindex = self.checkisradioselect.index(of: sender.tag)     _ = self.checkisbuttonenable.index(of: sender.tag)     tabledetails.tablefooterview?.ishidden = false     if sender.isselected {      } else{         if(chekindex == nil){             self.checkisradioselect.removeall(keepingcapacity: false)             self.checkisradioselect.append(sender.tag)             self.checkisbuttonenable.removeall(keepingcapacity: false)             self.checkisbuttonenable.append(sender.tag)             self.tabledetails.reloaddata()             self.addressselected = true             tabledetails.reloaddata()         }     } } func tableview(_ tableview: uitableview, numberofrowsinsection section: int) -> int{         if (addressselected == false){             if (section == 0){                 return shippingarray.count             }             else if (section == 1) {                 return 1             }             else{                 return 0             }         }else{             if (section == 0)             {                 return shippingarray.count             }             else             {                 return 1             }         }     } 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -