2014年2月26日水曜日

ios 親から子への値渡し

ios 親から子への値渡しのやり方です。


StoryBoardを使用して、ナビゲーションコントローラーの親から子へデリゲートを使用して、値渡しを行いたいと思います。

まず、StoryBoardの設定からです。



ナビゲーションコントローラーを引っ張って、2つのビューコントローラーに結びつけます。


1番目のViewControllerにBar Button Itemを置いて、次のViewControllerにセグウェーでひもづけます。

やり方は、

1.Bar Button ItemのSecondを右クリック

2.そのまま移動すると、青い線が引かれると思うので、SecondViewControllerにもっていって、そのままドラックを解放します。

3.すると、push,modalなどを選択する表示画面が現れるとおもうので、
pushを選択します。

これで、画面遷移が完成しました。


○次は、値渡しです。

親をViewController,子をViewController2とします。


まずヘッダーに記述します。(ViewController.h)

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong,nonatomic) NSString* str;

@end

続いて子のヘッダーにも同じプロパティを用意します。

(ViewController2.h)

#import <UIKit/UIKit.h>


@interface ViewController2 : UIViewController
@property (strong,nonatomic) NSString* myStr;
@property (weak, nonatomic) IBOutlet UILabel *label;  // 値表示用

@end


ヘッダーにプロパティを代入しました。
では、実際に遷移するところを見ます。
今回は、StoryBoard上で、BarButtonItemからセグウェーを仕込んだので、
画面遷移前に呼び出される
prepareForSegueメソッドで値渡しのプログラムを記述します。

StoryBoard上から遷移したので、遷移先のidentifierを登録して
プログラム上で、どこへ遷移するのか判別できるようにします。


遷移先のidentifierに入力したら画面遷移のところで、値を渡せるようにします。

(ViewController.m)

/*
    画面遷移前に呼び出されるメソッド
*/
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    _str = @"delegate";
    if ( [[segue identifier] isEqualToString:@"SecondPush"] ) {
        ViewController2 *Con2 = [segue destinationViewController];
        Con2.myStr = str;   // 子に親の値を渡す
    }
}

これで、子に値を渡すことができました。


0 件のコメント:

コメントを投稿