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; // 子に親の値を渡す
}
}
これで、子に値を渡すことができました。