1

重複の可能性:
View Controller 間でのデータの受け渡し

私は2つのモーダルビューを持っています。最初のモーダル ビューは、数量と価格を編集するために使用されます。2 番目のモーダル ビューは、価格を変更する理由を示すために最初のモーダル ビューの価格テキスト フィールドをクリックしたときに使用され、モーダル ビューの価格テキスト フィールドに新しい価格を入力できます。2 番目のモーダル ビューで価格を設定したときに、最初のモーダル ビューの価格を変更したい。2番目のモーダルビューの値をキャッチして最初のモーダルビューに入れる方法は?

4

4 に答える 4

1

NSNotificationセンターを使用する

FirstModalviewにobserverイベントを追加する必要があります

    -(void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload:) name:@"refresh" object:nil];
    }
- (void)reload:(NSNotification *)notification {
    textfield.text= [[notification userInfo] valueForKey:@"price"] ;
}

2番目のモーダルビューでは、編集が完了した後に通知を投稿する必要があります

(テキストフィールドの値を渡します)

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"333" forKey:@"price"];
   [[NSNotificationCenter defaultCenter] postNotificationName:@"refresh" object:nil userInfo:userInfo]

;

最後にオブザーバーを削除します

-

(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"refresh" object:nil];

}
于 2012-08-16T05:52:51.147 に答える
0

シングルトンを使用して、そのクラスのデータを保存することができます

于 2012-08-16T04:55:53.057 に答える
0

次の簡単な手順で、これを行うことができます。

最初の Modal ViewController では、次のような関数を宣言できます。

- (void) setUpdatedValueWithValue: (NSString *) newValue
{
    self.objTextField.text  =  newValue;
}

この関数をヘッダー ファイルでも宣言して、他のクラスからアクセスできるようにします。

2番目のモーダルViewControllerで

SecondViewController.h

@interface SecondViewController : UIViewController
{
     id    objFirstViewController;
}
@property (nonatomic, retain)   id   objFirstViewController;

@end

SecondViewController.m

@implementation SecondViewController

@synthesize objFirstViewController;

@end

好きな対象をSecondViewController渡す前に、FirstViewControllerSecondViewController

- (void) presentSecondViewController
{
    SecondViewController    *objSecondViewController  =  [[SecondViewController alloc] init];
    objSecondViewController.objFirstViewController    =  self;
    [self presentModalViewController: objSecondViewController animated: YES];
    [objSecondViewController release];
    objSecondViewController = nil;
}

次に、値の編集後に閉じるために呼び出している関数で、次のSecondViewControllerように実行できます。

- (void) finishEdit
{
    if([objFirstViewController respondsToSelector: @selector(setUpdatedValueWithValue:)])
    {
        [objFirstViewController performSelector: @selector(setUpdatedValueWithValue:) withObject: editedTextView.text];
    }
    [self dismissModalViewControllerAnimated: YES];     
}

お役に立てれば。

于 2012-08-16T05:40:04.943 に答える
-1

キーワードでオブジェクトを設定します

[[NSUserDefaults standardUserDefaults]setObject:@"value of second modal view" forKey:@"keyName"];

最初のモーダル ビューでそのオブジェクトを取得するよりも

NSString *name = [[NSUserDefaults standardUserDefaults]objectForKey:@"keyName"];
于 2012-08-16T04:38:43.943 に答える