1

私は2つのビューコントローラーを持っています。View Controller#2にはとがUIDatePickerありUITextFieldます。

View Controller#1に戻ってからView Controller#2に戻ると、UIDatePickerは以前に選択した日付を失い、UITextFieldは空白になります。

このように初期化されました:

@property (retain, nonatomic) IBOutlet UIDatePicker *datepick;

PushSegueを使用して2番目のViewControllerにアクセスし、次を使用して戻ってきました。

[self.navigationController popViewControllerAnimated:YES];

UIDatePickerの日付とUITextFieldの値を「保存」して、そのView Controllerに戻ったときに常に存在するようにするにはどうすればよいですか?

私は意見、仮説、提案を検索して見つけましたが、解決策はありません。

ありがとうございました。

4

1 に答える 1

0

これは、(メモリを適切に管理している場合)2番目のView Controllerをポップすると解放される(最初のView Controllerに戻る)ために発生します。したがって、元に戻したい場合は、実際には、デフォルト値を使用して完全に新しいインスタンスを作成します。

1つの解決策は、ViewController1からViewController2への強力な参照があることを確認することです。最初のViewControllerにプロパティを追加します。

@property (nonatomic, retain) SecondViewController *mySecondViewController;

ゲッターを実装します。

- (SecondViewController *)mySecondViewController {
    if (!mySecondViewController) {
        mySecondVieWController = [[SecondViewController alloc] init...];
    }
    return mySecondViewController;
}

次に、それを提示したいとき:

[self.navigationController pushViewController:self.mySecondViewController animated:YES];

初めて呼び出すときmySecondViewControllerはまだですnilので、ゲッターはそれを初期化します。次にゲッターを呼び出すと、同じインスタンスが返されます。

DeallocでViewControllerをリリースすることを忘れないでください。ちなみに、自動参照カウント(ARC)の使用を検討してください。

このアプローチは比較的簡単に実装できますが、2番目のView Controllerが不要になった場合でも、メモリに保持されるという欠点があります。

もう1つの方法は、選択した日付またはテキストを最初のView Controllerに(おそらくカスタムデリゲートプロトコルを介して)返し、次に2番目のView Controllerを提示するときに、これらの値を渡して日付とテキストを設定することです。 。

于 2013-01-13T23:17:06.297 に答える