2013-01-13 32 views
1

我有兩個視圖控制器。 視圖控制器#2有一個UIDatePickerUITextField如何在切換視圖控制器時保留UIDatePicker和UITextField值?

如果我回到視圖控制器#1,然後回到視圖控制器#2,UIDatePicker已經失去了它的上一個選定日期,並且UITextField是空的。

有人這樣初始化:

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

我使用推送Segue公司,並取回使用獲得的第二個視圖控制器:

[self.navigationController popViewControllerAnimated:YES]; 

我怎樣才能「拯救」中的UIDatePicker日期和UITextField值,以便它在返回到該視圖控制器時總是在那裏?

我搜索並找到了意見,假設和建議,但沒有解決方案。

謝謝。

+0

您需要展示一些關於如何啓動視圖控制器的代碼。並且您是否將視圖控制器2保存爲視圖控制器1中的ivar? –

+0

在ViewController.m中我有:@synthesize datepick; 已經嘗試保存值並將它們放回到DatePicker和UITextField中,但它們不會粘住。 – mstace

回答

0

發生這種情況是因爲(如果正確管理內存)第二個視圖控制器在彈出時會被釋放(回到第一個視圖控制器)。所以當你想回到它時,你實際上會創建一個全新的實例,並帶有默認值。

一個解決辦法是,以確保你有很強的參考視圖控制器2,從視圖控制器1.在第一視圖控制器添加一個屬性:

@property (nonatomic, retain) SecondViewController *mySecondViewController; 

實施,吸氣:

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

然後,當你想提出的:

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

第一次調用它,mySecondViewController仍然是nil,所以getter將它初始化。下次調用getter時,它只會返回同一個實例。

不要忘記在dealloc中釋放視圖控制器。順便說一句,請考慮使用Automatic Reference Counting (ARC)

這種方法相對比較容易實現,但它有不足之處,第二個視圖控制器保存在內存中,即使它不再需要。

另一種方法是將選定的日期或文本傳回給您的第一個視圖控制器(可能通過自定義委託協議),並在下一次要呈現第二個視圖控制器時,將這些值傳遞給它以設置日期和文字。

+0

我瞭解您正在展示的概念,但不瞭解它的實施情況。我正在使用Xcode 4.5,並在MainStoryboard中有兩個View Controller對象。我有一個ViewController.h文件和一個ViewController.m文件。使用這個設置我還沒有能夠實現你上面描述的。 – mstace

+0

在第一個視圖控制器中,我也有一個7段的分段控件。無論切換View Controller窗口的次數如何,segmentedControl都可以完全記住哪個段被佔用。那麼,它如何記住它的值而不是UIDatePicker? – mstace

+0

啊 - 試驗表明,在切換回第一個控制器中的ANY對象時,數據會保留。它是目前正在丟失數據的第二個控制器。所以,回到我無法工作的解決方案。 – mstace

相關問題