2017-07-20 2 views
1

Protokoll Delegatmethode wird nicht aufgerufen ..Protokoll Delegate Methode ist nicht in Swift genannt

First View Controller-Code

class ViewController: UIViewController,customDelegate { 

    var seconviewcontroller : SecondViewController = SecondViewController() 
    @IBOutlet weak var Label: UILabel! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    seconviewcontroller.delegate = self 
} 
func didSelectData(_ result: String) { 

    Label.text = result 
    print("Didselect Data Call") 

} 

Second-View-Controller-Code

import UIKit 
protocol customDelegate: class { 
    func didSelectData(_ result: String) 
} 

class SecondViewController: UIViewController { 
    var delegate: customDelegate? 

@IBOutlet weak var secondbutton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

@IBAction func secondbuttonclick(_ sender: Any) { 
    let selectedItem = "naga" 

    delegate?.didSelectData(selectedItem) 
} 

wie den func rufen didSelectData pls helfen mir

Antwort

0

Also im Grunde in Zeile var seconviewcontroller : SecondViewController = SecondViewController() ist anders als Ihre Pushing View Controller Instanz.

Sie eine separate Instanz von SecondViewController machen, so dass Sie Delegaten selbst zum Zeitpunkt des Drückens mit Schüben Objekt wie der

let secondVCInstance = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController 
secondVCInstance.delegate = self 
self.navigationController?.pushViewController(secondVCInstance, animated: true) 

HINWEIS getan haben: - Jedes Objekt hat seine eigenen Eigenschaften

0

Da Sie bereits ein Segment zum Navigieren zwischen Ansichten verwendet haben. Sie können das auch für dieses Beispiel verwenden. Ich gebe Folgendes als Codebeispiel, damit Sie sich selbst zurückverfolgen können, um das Problem in Ihrem Code zu erkennen.

enter image description here

First View-Controller

import UIKit 

class ViewController: UIViewController, SecondVCDelegate { 
    @IBOutlet weak var label: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let secondVC = segue.destination as? SecondViewController { 
      secondVC.delegate = self 
     } 
    }   

    func didSelectData(_ result: String) { 
     label.text = result 
     print(result) 
    } 
} 

Second-View-Controller

import UIKit 

protocol SecondVCDelegate: class { 
    func didSelectData(_ result: String) 
} 

class SecondViewController: UIViewController { 
    @IBOutlet weak var button: UIButton! 

    weak var delegate: SecondVCDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func buttonTapped(_ sender: UIButton) { 
     delegate?.didSelectData("My result") 
     dismiss(animated: true, completion: nil) 
    } 
} 
+0

es gut, danke funktioniert ...... – naga

+0

Keine Sorge, froh, es hilft. – Lawliet

+0

Ich muss die Daten mit der ersten Ansicht Controller an die zweite Ansicht Controller weitergeben Ich weiß, segue ist da, aber ich habe Protokoll Delegate pls Hilfe zu tun, wie zu tun – naga

Verwandte Themen