私が取り組んでいるプロジェクトがあり、これには 3 つのタブが含まれますUITabBarController
(すべてストーリーボードで行われます)。
各タブは異なるView Controllerから実行されています。
タブ 1 に、計算を実行して結果をテキスト ボックスに返すボタンがあります。計算を押すと、結果がタブ2のテキストボックスにも返されるようにしたい.
s間でデータを渡す方法がよくわからないUIViewController
ので、助けていただければ幸いです。
私が取り組んでいるプロジェクトがあり、これには 3 つのタブが含まれますUITabBarController
(すべてストーリーボードで行われます)。
各タブは異なるView Controllerから実行されています。
タブ 1 に、計算を実行して結果をテキスト ボックスに返すボタンがあります。計算を押すと、結果がタブ2のテキストボックスにも返されるようにしたい.
s間でデータを渡す方法がよくわからないUIViewController
ので、助けていただければ幸いです。
vshallによると、次のようなことができます:-
yourAppdelegate.h
@interface yourAppdelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>
{
NSString *myCalResult;
}
@property (nonatomic,retain) NSString *myCalResult;
yourAppdelegate.m
@implementation yourAppdelegate
@synthesize myCalResult,
yourCalclass.h
#import "yourAppdelegate.h"
@interface yourCalclass : UIViewController
{
yourAppdelegate *objAppdelegate;
}
yourCalclass.m
- (void)viewDidLoad
{
objAppdelegate = (yourAppdelegate *) [[UIApplication sharedApplication]delegate];
[super viewDidLoad];
}
-(IBAction)ActionTotal
{
objAppdelegate.myCalResult=result;
}
結果が保存されobjAppdelegate.myCalResult
、別のタブでこの変数を使用して、yourAppdelegat のオブジェクトを作成できます。それがあなたを助けることを願っています
アプリ デリゲートで変数を定義し、クラス 1 のその変数に結果を格納できます。クラスを切り替えると、appDelegate のインスタンスを作成してテキストフィールドに割り当てることで、クラス 2 でその値を取得できます。
Sanjit が示唆しているように、NSUserDefaults もこれを実現するための非常に便利でクリーンな方法です。
ありがとう。
計算された値を実際に保存する必要はなく、値が変更されたことを tab2 の他のコントローラーに通知するだけの場合はNSNotificationCenter
、NSNotification
.
tab2 でコントローラーを初期化するときは、通知のオブザーバーとして追加する必要があります。
そのようなもの:
タブ1で:
NSNumber *value = nil; // the computed value
[[NSNotificationCenter defaultCenter]
postNotificationName:@"com.company.app:ValueChangedNotification"
object:self
userInfo:@{@"value" : value}];
tab2 で: オブザーバーとして登録します (init または viewDidLoad メソッドで)
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(valueChanged:)
name:@"com.company.app:ValueChangedNotification"
object:nil];
通知が投稿されたときに呼び出されるメソッド:
- (void)valueChanged:(NSNotification *)note
{
NSDictionary *userInfo = note.userInfo;
NSNumber *value = userInfo[@"value"];
// do something with value
}
viewDidUnload またはそれよりも早く、オブザーバーからコントローラーを削除することを忘れないでください。
[[NSNotificationCenter defaultCenter] removeObserver:self];