モーダルビュー(modalView)とデリゲート(delegate)
デリゲート( delegate ) で悪戦苦闘~![叫び](https://stat.ameba.jp/blog/ucs/img/char/char2/254.gif)
設定画面で入力された値をメインに反影させるだけでめちゃくちゃ悩んでしまった。
今回参考にさせていただいたblog
▶テン*シー*シー[【iPhoneアプリ開発ドリル】モーダルビューを表示する(2)]
残念ながら理解できなかったf^^;
▶Sun Limited Mt.[[iPhone] モーダルビューの非表示、値の受け渡しはデリゲートで行う]
なんとなくわかった気になったけど、最初は動かなかったf^^;
動いた後、再度プログラムを見ると何故動かなかったのかがわかった。
▶Everything was born from Love[Study CoreData 7 ~親子三代奮闘記~]
理屈がわかった。なんとなくわかった・・・
考え方はとても参考になった。
▶timneill your second opinion[Modal View Controller Example – Part 2]
国内でサンプルが見つけられなかったので [modalview delegate ]でぐぐった。
サンプルがあったので参考にしながら作ったら動いた。![にひひ](https://stat.ameba.jp/blog/ucs/img/char/char2/193.gif)
■テスト用に作ったサンプル
モーダルビュー(子画面)で色を設定し、メインビュー(親画面)に反影させる。
▶Everything was born from Love[Study CoreData 7 ~親子三代奮闘記~]
↑ここのたとえ拡張させて・・・
子供が親に直接言えないから伝書鳩を使って伝える・・・みたいな・・・・
デリゲート( delegate )が伝書鳩で・・・
まず、子供は伝書鳩を使うよ~って宣言する!(@protocol ColorSelectDelegate;)
子供は伝書鳩をまず準備する!(id<ColorSelectDelegate> colorSelectdelegate_;)
伝書鳩に手紙を持たせる!([colorSelectdelegate_ selectColor:requestColor];)
親は、伝書鳩で来るんだなと待ち構える(@interface ModalViewController : UIViewController <ColorSelectDelegate>)
いつ来てもいいように伝書鳩のおうちを準備しとく!(@protocol ColorSelectDelegate
-(void)selectColor:(UIColor*)inColor; // デリゲートメソッド
@end)
伝書鳩が持って来た手紙を開封する(-(void)selectColor:(UIColor*)inColor; // デリゲートメソッド)
ん~わかりづらいたとえか・・・・![叫び](https://stat.ameba.jp/blog/ucs/img/char/char2/254.gif)
じゃぁパス!
モーダルビュー(子画面)側の設定:
モーダルビュー(子画面)で設定(入力)された値を親画面にデータを反影(メッセージを送信、データを受け渡す)させるためにデリゲート( delegate )の機能を持たせる。
今回は色のデータを受け渡したいので、 ColorSelectDelegate としました。
ColorSelectDelegate を使いますよ~って宣言をします。
デリゲート用のインスタンス変数とプロパティ(assign属性)を追加。
親画面の設定:
モーダルビュー(子画面)からの デリゲート( delegate )に対応させるためにプロトコルを宣言する。
デリゲート( delegate ) を読み込ませるために ColorSetViewController.h を読み込ませる。
デリゲート( delegate ) を追加する。
デリゲート( delegate ) のメソッド( -(void)selectColor:(UIColor*)inColor; )を使うよ~って宣言する。
デリゲート用メソッドを追加。
プロジェクト名:Modal
*モーダルビュー( modalView ) は親画面で閉じた方がいいらしい。
でも、ぐぐって見つかるサンプル、出版物のサンプルもほとんどが子画面で閉じてる気がする。
▶iOS View Controller プログラミングガイド (116p)
Modal.zip
![叫び](https://stat.ameba.jp/blog/ucs/img/char/char2/254.gif)
設定画面で入力された値をメインに反影させるだけでめちゃくちゃ悩んでしまった。
今回参考にさせていただいたblog
▶テン*シー*シー[【iPhoneアプリ開発ドリル】モーダルビューを表示する(2)]
![右矢印](https://stat.ameba.jp/blog/ucs/img/char/char2/283.gif)
▶Sun Limited Mt.[[iPhone] モーダルビューの非表示、値の受け渡しはデリゲートで行う]
![右矢印](https://stat.ameba.jp/blog/ucs/img/char/char2/283.gif)
動いた後、再度プログラムを見ると何故動かなかったのかがわかった。
▶Everything was born from Love[Study CoreData 7 ~親子三代奮闘記~]
![右矢印](https://stat.ameba.jp/blog/ucs/img/char/char2/283.gif)
考え方はとても参考になった。
▶timneill your second opinion[Modal View Controller Example – Part 2]
![右矢印](https://stat.ameba.jp/blog/ucs/img/char/char2/283.gif)
サンプルがあったので参考にしながら作ったら動いた。
![にひひ](https://stat.ameba.jp/blog/ucs/img/char/char2/193.gif)
■テスト用に作ったサンプル
モーダルビュー(子画面)で色を設定し、メインビュー(親画面)に反影させる。
![]() | ![]() | モーダルビュー(子画面)で表示された画面の色ボタンをタップするとメイン画面(親画面)の色が変わる。 |
↑ここのたとえ拡張させて・・・
子供が親に直接言えないから伝書鳩を使って伝える・・・みたいな・・・・
デリゲート( delegate )が伝書鳩で・・・
まず、子供は伝書鳩を使うよ~って宣言する!(@protocol ColorSelectDelegate;)
子供は伝書鳩をまず準備する!(id<ColorSelectDelegate> colorSelectdelegate_;)
伝書鳩に手紙を持たせる!([colorSelectdelegate_ selectColor:requestColor];)
親は、伝書鳩で来るんだなと待ち構える(@interface ModalViewController : UIViewController <ColorSelectDelegate>)
いつ来てもいいように伝書鳩のおうちを準備しとく!(@protocol ColorSelectDelegate
-(void)selectColor:(UIColor*)inColor; // デリゲートメソッド
@end)
伝書鳩が持って来た手紙を開封する(-(void)selectColor:(UIColor*)inColor; // デリゲートメソッド)
ん~わかりづらいたとえか・・・・
![叫び](https://stat.ameba.jp/blog/ucs/img/char/char2/254.gif)
じゃぁパス!
モーダルビュー(子画面)側の設定:
モーダルビュー(子画面)で設定(入力)された値を親画面にデータを反影(メッセージを送信、データを受け渡す)させるためにデリゲート( delegate )の機能を持たせる。
今回は色のデータを受け渡したいので、 ColorSelectDelegate としました。
ColorSelectDelegate を使いますよ~って宣言をします。
デリゲート用のインスタンス変数とプロパティ(assign属性)を追加。
親画面の設定:
モーダルビュー(子画面)からの デリゲート( delegate )に対応させるためにプロトコルを宣言する。
デリゲート( delegate ) を読み込ませるために ColorSetViewController.h を読み込ませる。
デリゲート( delegate ) を追加する。
デリゲート( delegate ) のメソッド( -(void)selectColor:(UIColor*)inColor; )を使うよ~って宣言する。
デリゲート用メソッドを追加。
プロジェクト名:Modal
*モーダルビュー( modalView ) は親画面で閉じた方がいいらしい。
でも、ぐぐって見つかるサンプル、出版物のサンプルもほとんどが子画面で閉じてる気がする。
▶iOS View Controller プログラミングガイド (116p)
モーダルView Controllerを閉じる モーダルView Controllerを閉じるときによく使われるアプローチは、親のView Controllerに閉じさせ る方法です。つまり、できる限り、そのモーダルView Controllerを表示したのと同じView Controller が閉じるべきなのです。 |
![クリップ](https://stat.ameba.jp/blog/ucs/img/char/char2/296.gif)