2017-09-07 13 views
-1

Hier übergebe ich meinen bool Wert von Tabellenansicht Zelle zu Tabellensicht Klasse mit Delegaten, aber nicht übergeben kann mir jemand helfen, wie mit einer anderen Methode übergeben oder wenn mich nicht korrigieren, was falsch ist während der Weitergabe und in diesem es zurück kein Wert?Wie Bool-Wert von der Tabellenansicht Zelle Klasse an die Tabellenansicht Klasse in Swift 3 übergeben?

hier der Code für meine Tableview-Klasse ist

class CheckoutViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,checkoutDelegate,UIGestureRecognizerDelegate,boolValidationDelegate { 
var radio: Bool? 
func boolvalidation(bool: Bool) 
    { 
     radio = bool 
    } 
@IBAction func continueButtonAction(_ sender: Any) { 
     print(radio) 
     if radio == 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) 
     } 
    } 
let cell = tableView.dequeueReusableCell(withIdentifier: "shippingmethodcell", for: indexPath) as! MethodTableViewCell 
      cell.delegate = self 
      return cell 

hier ist meine Tabellenansicht Zellklasse

protocol boolValidationDelegate{ 
    func boolvalidation(bool: Bool) 
} 

class MethodTableViewCell: UITableViewCell,UITableViewDataSource,UITableViewDelegate { 
var radioSelection: Bool? 
var boolDelegate: boolValidationDelegate? 
func paymentRadioAction(button : KGRadioButton) { 
     _ = button.center 
     let centralPoint = button.superview?.convert(button.center, to:self.shippingTableView) 
     let indexPath = self.shippingTableView.indexPathForRow(at: centralPoint!) 
     if button.isSelected { 

     } else{ 
      chekIndex = indexPath 
      radioSelection = true 
      self.shippingTableView.reloadData() 
     } 
     self.boolDelegate?.boolvalidation(bool: radioSelection!) 
     print(radioSelection) 
    } 
+0

Zelle. boolDelegate = self In CheckoutViewController – karthikeyan

+1

Nachdem Sie 'boolDelegate' eingestellt haben, sollten Sie, wie die Antworten unten, vorschlagen, dass Sie einen starken Referenzzyklus haben. Sie möchten Ihr Protokoll wirklich zu einem "Klassen" -Protokoll machen (z. B. "Protokoll boolValidationDelegate: class {...}") und dann Ihr 'boolDelegate' zu ​​einer" schwachen "Eigenschaft machen. (Ich würde auch das Protokoll umbenennen, um mit Großbuchstaben zu beginnen (zB 'BoolValidationDelegate'), nur als eine Frage der Einhaltung von Standard-Programmierkonventionen.) – Rob

+0

Geben Sie den Code, wie Sie Delegat in CellForRowAtIndexPath – raki

Antwort

2

Sie müssen cell.boolDelegate in tableView(_:cellForRowAt:) zu self in CheckoutViewController

cell.boolDelegate = self 
einstellen
+1

FYI, es ist ['tableView (_: cellForRowAt:)'] (https://developer.apple. com/documentation/uikit/uitableviewdatasource/1614861-Tabellenansicht). – Rob

+0

Ich habe diesen Code bereits in meiner Zelle für die Zeile im Index Pfad @Baig –

2

Sie müssen d einstellen Elegate-Klasse In CheckoutViewController von cellForRowAtIndexPath Methode

cell. boolDelegate = self 
+1

FYI, es ist ['tableView (_: cellForRowAt:)'] (https://developer.apple.com/documentation/uikit/uitableviewdatasource/1614861 -Tabellenansicht). – Rob

+0

Ich habe den Code bereits, was Sie in Zelle für Zeile bei –

+0

erwähnt Check ZahlungRadioAction diese Funktion aufrufen oder nicht, Sie übergeben nichts, wenn die Schaltfläche ausgewählt – karthikeyan

Verwandte Themen