【Swift】PresentationControllerでモーダルを表示したい
こちらの記事を参考にモーダルビューを作成しました。
このモーダルビューにメール送信画面を開くボタンを置き、尚且つビューのサイズとUIPartsのframe値をマルチデバイス対応させたかったのでUIPresentationControllerを継承したクラスにviewを新たに作成するメソッドを追加しました。
表示元となるViewControllerはmodal viewのサイズ情報を持っていないためSettingUIPresentationControllerクラスでUIPartsを配置しています。
SettingUIPresentationController
1protocol SendMailDelegate { 2 func sendMail() 3} 4 5func createView() -> UIView{ 6 let viewSize = (width:self.presentedView!.frame.width, height:self.presentedView!.frame.height) 7 let secondView = UIView.init(frame: self.labelProcessing.CGRectMake(0, 0, viewSize.width, viewSize.height)) 8 secondView.backgroundColor = .lightGray 9 10 let mailSendButton = UIButton(frame: CGRect.init(center: CGPoint.init(x: viewSize.width / 2, y: viewSize.height * (2/3)), size: CGSize.init(width: 100,height: 50))) 11 mailSendButton.setTitle("ご意見・ご要望はこちら", for: .normal) 12 mailSendButton.setTitleColor(UIColor.blue, for: .normal) 13 mailSendButton.addTarget(self, action: #selector(self.clickSendMailButton(sender:)), for: .touchUpInside) 14 15 16 mailSendButton.backgroundColor = .blue 17 secondView.addSubview(mailSendButton) 18 return secondView 19 } 20 21 22 var sendMailDelegate: SendMailDelegate? 23 @objc func clickSendMailButton(sender: UIButton){ 24 print("押したよ") 25 sendMailDelegate?.sendMail() 26 } 27
この時clickSendMailButton()が実行された時にUIViewControllerにメール送信画面を開く処理を委任したいのですが、
UIViewController側でSettingUIPresentationControllerをインスタンス化出来ず、sendMailDelegate=selfが書けません。
SettingViewController
1 override func viewDidLoad() { 2 super.viewDidLoad() 3 4 var settingUIPresentationController = SettingUIPresentationController() //コンパイルエラー 'init()' is unavailable 5 SettingUIPresentationController.sendMailDelegate = self //コンパイルエラー Instance member 'sendMailDelegate' cannot be used on type 'SettingUIPresentationController'; did you mean to use a value of this type instead? 6 7 }
試したこと
SettingUIPresentationControllerにデフォルトイニシャライザを追加
Cannot override 'init' which has been marked unavailableとコンパイルエラーになるだけでした
自分でdelegateを使うのが初めてで見よう見まねで書いてみたのですが、ネット上にはUITableViewCellのIBOutlet接続やstoryboardのidentifierを使ったインスタンス化ばかりでこういう場合のdelegateの書き方は見つかりませんでした。
そもそもこのような使い方が合ってるのかも分かりませんが、このような場合のdelegateの使い方をご教示いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/03 05:14
2020/10/03 09:13