2012-11-07 22 views
1

所以我有兩個場景......第一個有2個輸入文本字段。在進入下一個場景之前,我會在第一個字段中輸入信息。下一個場景會生成我需要在第一個場景中使用的信息,以便在第二個文本字段中輸入。每當我回到第一個場景時,第一串信息就被清除了。我不能簡單地使用後退按鈕,我需要使用prepareforsegue,所以我很好奇,如果有任何方法在場景1中輸入我的文本信息,繼續到場景2(生成其他信息)並且繼續回到場景1而不丟失先前的信息進入?繼續而不丟失以前的信息

我希望這是足夠的信息。提前致謝。

EDITED

這是我的一些代碼。

inputMilesViewController.h(FIRST VIEW)

@property (weak, nonatomic)IBOutlet UIButton *myTodayButton; 

(myTodayButton塞格斯到DVC - 至原因請看myTodayButton.titleLabel.text等於現有 「今天」)

dvc.m(第二視圖)

- (IBAction)myNewSelectDate:(id)sender { 

inputMilesViewController *classInstance = [[inputMilesViewController alloc] init]; 

[classInstance changeButtonText:[_myNewDatePicker date]]; 

[self dismissViewControllerAnimated:YES completion:nil]; 

} 

inputMilesViewController.m(FIRST VIEW)

-(void) changeButtonText:(NSDate*) dateForInput{ 
NSLog(@"The button is titled %@", self.myTodayButton.titleLabel.text); 

NSDate *now = [NSDate date]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"EEE, MMM d,''yy"]; 

NSString *formattedDateString = [formatter stringFromDate:dateForInput]; 

... ... (這裏是我嘗試改變按鈕的文本讀取爲formattedDateString但是NSLog指示按鈕文本現在(空)。

+0

要麼保持參照第二視圖,以便它不會得到釋放(你可以搶在'performseguewithidentifier'方法的參考),或像'NSCoding'保存數據,每次重裝等領域。 – msgambel

回答

1

新的編輯

頂部之前進入的iOS添加inputMilesViewController.m

// At the top with the other #imports 
#import "dvc.h" 

也是我建議學習面向對象的進口。它是它的關鍵部分。它不難,但絕對重要。

將此代碼添加到您的項目中。 在inputMilesViewController.m添加

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [segue.destinationViewController setClassInstance];  
} 

dvc.h補充一點:

@property (weak, nonatomic) inputMilesViewController *classInstance; 

dvc.m補充一點:所以

@synthesize classInstance = _classInstance; 

- (IBAction)myNewSelectDate:(id)sender { 

    // Removed this line 
    //inputMilesViewController *classInstance = [[inputMilesViewController alloc] init]; 

    [self.classInstance changeButtonText:[self.myNewDatePicker date]]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 

} 

正如我所說的意見,這是什麼代碼會做的就是給你的字符串到原來的fisrtViewController,而不是你剛剛創建的新字符串。爲了達到這個目的,你需要創建屬性classInstance,並使其成爲對原始viewController的引用。

快速提示:使您的類名以大寫字母開頭,以便您可以將它們與變量區分開來。所以在這種情況下:InputMilesViewControllerDvc

另外在我看來,你並不是很熟悉面向對象編程。我建議你嘗試瞭解更多關於MVC模型的內容。兩者都是iOS編程的關鍵部分。

如果它仍然無法告訴我。

希望它有幫助。

+0

非常感謝dismissViewController的想法。正是我在找什麼。 Iif我使用dismissViewController,我需要從第二個視圖傳遞信息到第一個我仍然使用prepareForSegue,即使我沒有技術上使用segue?我現在的問題是我試圖從第二個場景中獲取信息(NSString),並在第一個場景中使用它來更改按鈕的文本。我有一段時間試圖弄清楚這一點。我一直在使用「[_myTodayButton setTitle:@」TODAY「爲狀態:UIControlSateNormal」。那裏沒有運氣。不知道爲什麼。 –

+0

我也試過_myTodayButton.titleLabel.text = [NSString stringWithString:formattedDateString]; –

+0

我會改變從第二個場景發送信息到第一個場景的答案,讓它更容易 – pedros

1

我同意佩德羅斯。這聽起來像你做錯了。您可能正在使用segue從vc1到vc2,然後是從vc2到vc1的另一個segue - 這是錯誤的!這是錯誤的,因爲一個真正的segue會創建一個新的視圖控制器實例。所以你不會回到你剛纔離開的那個vc1。相反,你正在製作一個全新的vc1並繼續!這就是爲什麼田地是空的;這是一個全新的清晰視圖控制器。

相反,你想要做的是做一個真正的遊戲和「退出」(或「放鬆」)繼續回來。這是一個新的iOS 6功能。我有一些例子在這裏:

https://github.com/mattneub/Programming-iOS-Book-Examples

尤其是看四個例子,其名稱開頭「ch19p560」和「ch19p561」。這些介紹瞭如何在您繼續使用時將信息從vc1傳遞到vc2,然後展示如何將信息從vc2傳回到相同的vc1實例中。並且它們展示了不同程度的展開(例如跳回幾個視圖控制器)以及在各種情況下。