LoginSignup
39
39

More than 5 years have passed since last update.

delegateでモーダル画面間の値の受け渡し

Last updated at Posted at 2013-11-15

いろいろなHPを参考にしても、なかなかうまくいかなかったコレ。
わかりやすく解説したいと思います!

前提

・値をうけとるViewController -> もらう.h, もらう.m
・渡す値をつくるViewController -> つくる.h, つくる.m
・もしStoryboardをつかうなら、ViewControllerのひもづけをしておく

つくる.hでdelegateの宣言


@protocol つくるDelegate;

@interface つくる: UIViewController{
//もともとあるやつ
}

@property (weak, nonatomic) id<つくるDelegate> delegate;

// イニシャライザ
- (id)init;

//「おくる」側で値をセットするための関数
-(void)セット;

@end //これももともとある

@protocol つくるDelegate <NSObject>

// 「もらう」で呼び出すためのメソッド「おくる」、ここでは送る値はNSString
- (void)おくる:(NSString*)str;
@end

つくる.mでイニシャライズ&値をセット


- (id)init
{
    if (self = [super init]) {
        // 初期処理
    }
    return self;
}

- (void)せっと {
 NSString *str = @"おくる値だよー";
    [self.delegate おくる:str];
}   

を書き加えておきます。
この「せっと」はあるボタンを押したときのイベントにすることも可能です。
そこのあたりは適宜書き換えてみてください。ヘッダーもあわせるのを忘れずに。

もらう.hでインクルード、デリゲートを追加

//#importがあるところに追加
#import "つくる.h"

@interface もらう : UIViewController<つくるDelegate>{
//もともとあるところに<>で追加!
}

もらう.mにおくるメソッドと、つくる.mにうつるためのメソッドを追加

うつるためのメソッドは、Storyboardをつかう場合とそうでない場合の2通りあります!

- (void)おくる:(NSString*)str
{
 //受け取った値をlogに表示
  NSLog(@"%@", str);
   //「つくる」を閉じる
    [self dismissViewControllerAnimated:YES completion:NULL];
}

//Storyboardをつかわない編
 -(void)いどう{
// 遷移先の「つくる」のインスタンスを取得
    つくる *つくる = [[つくる alloc] init];
    つくる.delegate = self;
    [self presentViewController:つくる animated:YES completion:nil];

}

 //Storyboadをつかう編
- (void)いどう:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"つくるをひらく"]) {
//ここは、Storyboardで設定しなければいけないところ。
//ModalでViewController同士をつないで、そのModalの●を選んで、
//IDに「つくるをひらく」と入れた場合です。       

        つくる *つくる = segue.destinationViewController;
        つくる.delegate = self;   
    }
}

この移動のところがわりとみそかなって思っています。

いかがでしょうか。日本語の部分を適宜おきかえてくださいね。
誤りなどあれば訂正コメントください!
も、もしかしてiOSの投稿1000個目…!?

39
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
39