2017-07-20 11 views
1

で呼び出されていません。..プロトコルデリゲートメソッドは、プロトコルデリゲートメソッドが呼び出されていないスウィフト

最初のビューコントローラコード

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") 

} 

第2のビューコントローラのコードどのように

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) 
} 

func didSelectData plsを呼び出すには

答えて

0

したがって、基本的にはvar seconviewcontroller : SecondViewController = SecondViewController()という行は、ビューコントローラのプッシュインスタンスとは異なります。

あなたはとてもあなたがその

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

NOTEようなオブジェクトプッシュを押す時にデリゲート自己を行っているSecondViewControllerの別個のインスタンスを作っている: - 各オブジェクトは、独自のプロパティ

0

を持っていますすでにビュー間を移動するためにsegueを使用しています。また、この例で使用することもできます。私はコードサンプルとして以下を与え、コード内の問題を検出するために自分自身を追跡することができます。

enter image description here

最初のビューコントローラ

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) 
    } 
} 

第二ビューコントローラ

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

それは助けて喜ん罰金おかげ...... – naga

+0

心配はありませんが、働いています。 – Lawliet

+0

私は最初のビューコントローラでデータを2番目のビューコントローラに渡す必要がありますsegueはそこにありますが、プロトコルデリゲートを使用する必要がありますどのように行うには助けます – naga

関連する問題