以下のURLのコードのDemoを使用しています。
https://github.com/shin8484/PopupWindow
こちらの、RegisterPopupViewという画面下からcontainer View が出てくるものを編集しようとしています。RegisterPopupViewクラスから、そのcontainer Viewの上にあるボタンが押された時の処理内に、VCにあるメソッドを実行したいです。そのためにはdeligate処理が必要という事でそれを行おうとしています。呼ばれる側MainpageViewControllerと呼ぶ側RegisterPopupViewは以下の様になっています。(関係ない部分は多様省略しています)
swift
1class MainpageViewController: UIViewController { 2 3 @IBOutlet private weak var registerPopupView: RegisterPopupView! 4 5func test(){ 6 7//do something 8} 9 10override func viewDidLoad() { 11 super.viewDidLoad() 12 13 registerPopupView.delegate = self //Unexpectedly found nil while unwrapping an Optional value 14}
swift
1class RegisterPopupView: UIView, PopupViewContainable, Nibable { 2 3 weak var delegate: MainpageViewController? 4 5 6 @IBOutlet weak var containerView: UIView! { 7 didSet { 8 containerView.layer.masksToBounds = true 9 } 10 } 11 12 @IBAction func didTapRegisterButton() { 13 14 15 16 delegate?.test() 17 18 registerButtonTapHandler?() 19 20 }
registerPopupView.delegate = self でUnexpectedly found nil while unwrapping an Optional value が出るのはregisterPopupView.delegateがnilだからで、MainpageVCの方で、@IBOutlet private weak var registerPopupView: RegisterPopupView!のアウトレット接続が必要な様ですが、その方法が分かりません。どれと接続すれば良いのでしょうか?container Viewやその上のViewでしょうか?しかしいずれも接続できません。何が問題でしょうか?
ーーーーー追記ーーーーーーーーーー
「RegisterPopupViewController」のインスタンスを生成した際RegisterPopupViewController.delegateにVCのインスタンスを渡す、の部分ですが、要は以下の
swift
1let hoge = Hoge() 2let piyo = Piyo() 3hoge.delegate = piyo
の部分ですよね?今回代理人クラスはVCなのでこれらはどこでインスタンス化されるのでしょうか??いわゆる代理人を指定の部分だけよくわからないです。最初はregisterPopupView.delegate = selfの様にしてviewDidLoad()の中でやろうとしていたわけですが、これだとregisterPopupViewがインスタンス化されてなくてnilになってしまうという事でした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/01 03:50 編集
2018/09/01 07:39
2018/09/01 10:50
2018/09/01 12:43
2018/09/01 16:03