###前提・実現したいこと
SwiftでViewController間でdelegateをしようと思ってるいるのですが、うまく行きません。
コードでは、SecondViewController上のボタンを押すと、FirstViewControllerのtest()が実行されるようにしようとしています。
###発生している問題・エラーメッセージ
SecondViewControllerでのdelegateがnilになってしまい、FirstViewControllerにあるtest()を呼んでくれません。
###該当のソースコード
Swift
1//FirstViewController 2import UIKit 3 4class FirstViewController: UIViewController, TestDelegate { 5 6 func test() { 7 print("called delegate") 8 } 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 let storyboard = UIStoryboard(name: "Main", bundle: nil) 14 let secondVC = storyboard.instantiateViewController(withIdentifier: "Second") as! SecondViewController 15 16 secondVC.delegate = self 17 } 18 19 override func didReceiveMemoryWarning() { 20 super.didReceiveMemoryWarning() 21 } 22} 23 24//SecondViewController 25import UIKit 26 27protocol TestDelegate { 28 func test() 29} 30 31class SecondViewController: UIViewController { 32 33 var delegate:TestDelegate? 34 35 @IBAction func pushButton(_ sender: UIButton) { 36 delegate?.test() 37 } 38 39 override func viewDidLoad() { 40 super.viewDidLoad() 41 } 42 43 override func didReceiveMemoryWarning() { 44 super.didReceiveMemoryWarning() 45 } 46}
###試したこと
昨日、ViewからViewControllerへのdelegateを質問した際に、ViewControllerで指定したViewのインスタンスが正しくstoryboard上のViewをさしていないという指摘をいただきました。
そのため、FirstViewControllerからStoryboard上のSecondViewControllerを示すようにコードを書いてみたつもりなのですが、やはりインスタンスを正しく指定できていないのか、SecondViewControllerのdelegateがnilとなっています。
###補足情報(言語/FW/ツール等のバージョンなど)
StoryBoardはMain.storyboardです。
SecondViewControllerのstoryboard IDは"Second"としています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/06 13:26
2017/12/07 02:34
2017/12/07 13:58
2017/12/07 14:25
2017/12/08 11:01