2017-06-24 7 views
0

Hier versuche ich, Wert von einer Klasse LanguageSelectionTVC zu einem anderen RegistrationVC übergeben, indem Sie ein Protokoll verwenden.Delegate-Funktion wird nicht iOS Swift aufgerufen

Wenn ich versuche, und rufen Sie die Methode self.delegate?.setSelectedLangauges(self.languagesSpokenArray) innerhalb LanguageSelectionTVC es nicht nennen die Methode setSelectedLangauges innerhalb der Klasse Registration VC könnte jemand bitte vorschlagen, wo ich falsch gehe?

protocol LanguageSelectionTVCProtocol { 
    func setSelectedLangauges(_ valueSent: [String]) 
} 


class LanguageSelectionTVC: UITableViewController { 
    var delegate     : LanguageSelectionTVCProtocol? = nil 

    func saveAndClose() { 
     self.delegate?.setSelectedLangauges(self.languagesSpokenArray) 
     dismiss() 
    } 

} 


class RegistrationVC:   UIViewController, 
           UITableViewDelegate, 
           UITableViewDataSource, 
           LanguageSelectionTVCProtocol{ 

    func setSelectedLangauges(_ valueSent: [String]){ 
     self.showLanguagesSpoken(valueSent) 
    } 
} 

Umzug nach LanguageSelectionTVC von RegistrationVC. Die unten tableView Methode ist in meinem RegistrationVC

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let row  = indexPath.row 
     let section = indexPath.section 

     let currentCell = tableView.cellForRow(at: indexPath) as! UITableViewCell 
     if section == 4 && row == 0 { 
      // The user has clicked on languages spoken cell 
      self.performSegue(withIdentifier: "LanguageSelectionTVC", sender: self) 
     } 
    } 
+1

Wo Sie den Delegaten Show setzen, wie Sie von 'RegistrationVC' zu' LanguageSelectionTVC' bewegen –

+0

Sie müssen ** ** gesetzt den Delegaten irgendwo. – vadian

+0

@NiravD hat meine Frage aktualisiert, um zu zeigen, wie ich zu 'LanguageSelectionTVC' von' RegistrationVC' gehe – user44776

Antwort

1

Sie müssen LanguageSelectionTVC von preparForSegue zugreifen delegate davon einzustellen. So override die prepare(for:sender:) in Ihrem RegistrationVC.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "LanguageSelectionTVC" { 
     let vc = segue.destination as! LanguageSelectionTVC 
     vc.delegate = self 
    } 
} 
+0

Vielen Dank, es funktioniert !! – user44776

+0

@ user44776 Willkommen Kumpel :) –

1

Sie müssen die Delegierten in RegistrationVC zu LanguageSelectionTVC setzen, zum Beispiel Sie es einrichten können, wenn ein Übergang durchführen:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let targetVC = segue.destination as! LanguageSelectionTVC 
    targetVC.delegate = self 
} 
0

Sie müssen Delegierte einzustellen. Können Sie bitte unten Beispiel für Passdaten zwischen zwei View-Controller sehen.

import UIKit 
protocol SenderViewControllerDelegate 
{ 
    func messageData(str1:NSString) 
} 
class tableViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource 
{ 
var delegate: tableViewController? 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    self.delegate?.messageData(str1: “Hello world”) 
} 
} 

Empfangsdaten im unten Controller

import UIKit 
class HomeViewController: UIViewController ,SenderViewControllerDelegate { 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    let objtableview = tableViewController(nibName: "tableViewController",bundle: nil) 
     objtableview.delegate = self 
     self.navigationController?.pushViewController(objtableview, animated: true) 
    } 
    func messageData(str1:NSString){ 
     print(str1) 
    } 
} 
Verwandte Themen