まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを。参照していないものに関しては、コピペ改変まったく問いません

追記分:Storyboard+TabBarでボタンを押してデータを送信

更にStoryboard+Tabbarでボタンを押して次のタブへデータを送るコード書きました。
コードのダウンロードは以下です。
GitHub - prince9/SBTabDataSend: Sent data to the next Tab using Storyboard.TabBarでStoryboardを使ってデータの受け渡しをします

タブの切り替えでデータの送信を行っているのではなく、別途ボタンを設置してそのボタンを押してデータを送ってます。前のタブに戻ってデータを確認したい、データ入力を確定させてからデータを送りたいという場合に使用できるかと思います。
Viewの追加は特に必要なく、Tabbed Applicationを選択して新しくプロジェクトを作ります。後はUI設置&関連づけをして、追記分を書くだけでOK。
TabBarで注意しなければいけないのは、普段viewDidLoadに書くような処理をviewWillAppearに書かなければいけない点です。
おそらく読み込みの順番のせいだと思いますが、viewDidLoadに書くと正常に動かないので注意してください。
以下が追加するコードになります。新規プロジェクトを作ったときに既に追加されているコードは所々省いていることがあります。詳細は上のサンプルでご確認ください。

・AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate> {
        //追加
    NSString *labelData1; //スライダのデータを送る変数
    NSString *labelData2; //TextFieldに入力されたデータを送る変数
}
...
//labelData1、labelData2というプロパティを作る
@property (strong, nonatomic) NSString *labelData1;
@property (strong, nonatomic) NSString *labelData2;

・FirstViewController.h

@interface FirstViewController : UIViewController
@property (weak, nonatomic) IBOutlet UISlider *mySlider;
@property (weak, nonatomic) IBOutlet UITextField *myField;

//キーボードを隠すボタン
- (IBAction)KeyHide:(id)sender;
//データを送るボタン
- (IBAction)detaSend:(id)sender;

・FirstViewController.m

#import "FirstViewController.h"
#import "AppDelegate.h"
@implementation FirstViewController
@synthesize mySlider;
@synthesize myField;
...

- (IBAction)KeyHide:(id)sender {
    //キーボードをしまう
        [myField resignFirstResponder];
}

//ボタンを押すとデータを送る
- (IBAction)detaSend:(id)sender {
    //データを送る準備
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    appDelegate.labelData1 = [NSString stringWithFormat:@"%f",mySlider.value];
    appDelegate.labelData2 = myField.text;
}

・SecondViewController.h

@interface SecondViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *myLabel1;
@property (weak, nonatomic) IBOutlet UILabel *myLabel2;

・SecondViewController.m

#import "SecondViewController.h"
#import "AppDelegate.h"

@implementation SecondViewController
@synthesize myLabel1;
@synthesize myLabel2;
...

//画面が表示される直前に実行される処理を書く。TabBarの場合、- (void)viewDidLoadに以下の処理を書くと正常に表示されない
- (void)viewWillAppear:(BOOL)animated
{
    //データを受け取って、ラベルに表示する
    
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    myLabel1.text = appDelegate.labelData1;
    myLabel2.text = appDelegate.labelData2;
    
    [super viewWillAppear:animated];
}