swiftでポップアップの値渡しを簡単に実装する方法
はいどうもこんにちは
相変わらずGithubがろくすっぽ使えませんが何とか生きています
いつもハマった話ばかり書いていますが、今日は別にハマっていないけど、デリゲートでコールバックするより綺麗だなと思ったので書きます!
デリゲートは沢山コールバックをするならひとまとめにできるのでわかりやすいのですが、一つコールバックしたいってくらいだとこっちのがシンプルで楽な気がします。
特にポップアップが閉じられた時にコールバックしたことってよくあると思うのですが、今回はそれです。
方針としては
1. ポップアップのコントローラに"メソッドの入れ物"を配置
2. ポップアップを開く前のコントローラに、ポップアップを開くときのコードと、ポップアップが閉じたあとの処理を実装
3. ポップアップのコントローラに閉じるボタンを押されたときの処理を実装
こんな流れです
それではまずは
1. ポップアップのコントローラに"メソッドの入れ物"を配置
メソッドの入れ物です。今はまだ空っぽです。
これを置いておくことで、渡されたメソッドをポップアップのクラスで実行することができます。
class PopupVC: UIViewController {
// メソッドの入れ物みたいなものです
var emptyClosure: (() -> Void)?
}
2. ポップアップを開く前のコントローラに、ポップアップを開く前の処理と閉じた後にやりたい処理を実装
特筆すべき点はありませんが、ポップアップのVCの開き方はケースバイケースなのでよしなにお願いします。
class SomeVC: UIViewController {
func showPopup(){
let pupupVC = (略)(何かしらの方法でポップアップのコントローラをここに)
// ここで入れ物にメソッドを渡します
pupupVC.emptyClosure = {self.hogeMethod()}
// (ここで何かしらの方法でポップアップを開く処理を書きます)
}
func hogeMethod(){
// (ポップアップが消えたときにやりたい処理)
}
}
3. ポップアップのコントローラに閉じるボタンを押されたときのコールバック処理を実装
既に2.で空だった入れ物にはメソッドが入りました。
そしてここでdismiss()のcompletionにて、閉じるときにSomeVCで定義したメソッドを発動します。
class PopupVC:UIViewController {
// 空の入れ物でしたが、既にこいつはメソッドをもっています
var emptyClosure: (() -> Void)?
@IBAction func closeBtnAction(_ sender: UIButton) {
self.dismiss(animated: false, completion: {
// UIViewControllerが閉じられると共に実行します
self?.emptyClosure!()
})
}
}
こんな感じでシンプルにコールバック処理が書けました。
コールバックの量が多い場合はdelegateを使った方が保守性は高いかもしれませんが、簡単なものならこれでもいいですね
Author And Source
この問題について(swiftでポップアップの値渡しを簡単に実装する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/marienplatz/items/0dd30aee6dd4818ecefe著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .