0

私が取り組んでいるプロジェクトがあり、これには 3 つのタブが含まれますUITabBarController(すべてストーリーボードで行われます)。

各タブは異なるView Controllerから実行されています。

タブ 1 に、計算を実行して結果をテキスト ボックスに返すボタンがあります。計算を押すと、結果がタブ2のテキストボックスにも返されるようにしたい.

s間でデータを渡す方法がよくわからないUIViewControllerので、助けていただければ幸いです。

4

3 に答える 3

2

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 のオブジェクトを作成できます。それがあなたを助けることを願っています

于 2013-01-19T13:04:13.900 に答える
1

アプリ デリゲートで変数を定義し、クラス 1 のその変数に結果を格納できます。クラスを切り替えると、appDelegate のインスタンスを作成してテキストフィールドに割り当てることで、クラス 2 でその値を取得できます。

Sanjit が示唆しているように、NSUserDefaults もこれを実現するための非常に便利でクリーンな方法です。

ありがとう。

于 2013-01-19T12:44:36.827 に答える
1

計算された値を実際に保存する必要はなく、値が変更されたことを tab2 の他のコントローラーに通知するだけの場合はNSNotificationCenterNSNotification.
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];
于 2013-01-19T13:01:44.463 に答える