2012-02-20 69 views
8

我試圖從我的UIViewController切換回到我的UITableViewController,但是它的工作方式並不是我想要的。 我從一開始就創建了與故事板的界面,所以我並不真正從代碼移動到一個視圖。到目前爲止,我只是推動我的視圖每個sergues這是很容易與故事板實施。但是當我嘗試回到以前的視圖時,將會實現一個新的ViewController,因此我存儲在舊視圖中的所有數據都將「丟失」。從控制器移回到前一個

居然沒有任何代碼,我可以介紹你(因爲sergues的),但情況是:

- >我在我的UITableView的一個MutableArray存儲的東西。

- >用戶點擊掃描按鈕,掃描應該在我的數組中導入的新項目。

- >當試圖推回到我的tableView有一個新的控制器喚醒我,不知道我存儲在舊的數據。

那麼,我該如何簡單地回到我的舊控制器防止創建一個新的一直?

一個sergue-push總是會創建一個新的Controller嗎?

(問題可能很簡單,但我是新來的這個東東試圖通過搜索功能提出了一些成績,但他們沒有工作:()。

/編輯:Popback問題已經解決,但陣列填寫問題仍然存在代碼:。

GeneralSettings *sharedGS = [GeneralSettings sharedInstance]; 
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; 
[sharedGS.listArray insertObject:strCheckString atIndex:0]; 
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN); 

在sharedGS.strEAN數據(「83274572354」,即) 數據在listArray(空)

回答

20

你不推回這就產生的一個新實例先前的控制器類,你彈出回來。你可以完成這2種方式。

1:在代碼中,當您想將平板電腦視圖控制器返回(彈出)到以下語句中時。

[self.navigationController popViewControllerAnimated:YES];

2:如果你想要做它在故事板需要實現以下自定義SEGUE類:

實施

// PopSegue.m 

#import "PopSegue.h" 

@implementation PopSegue 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
[src.navigationController popViewControllerAnimated:YES]; 
} 

和頭

// PopSegue.h 

#import <UIKit/UIKit.h> 

@interface PopSegue : UIStoryboardSegue 

@end 

把這個方法放在你的UIViewController中來設置一個pr返回到你的UITableViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"goBackToTableView"]) { 
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}]; 
    } 
} 
+0

謝謝!我用的第一個,因爲這將是一個有點過大,以創建單個彈回一個新的類,但我的陣列仍不能正常使用的打算...我查了一下我的變量,我的數據在那裏(例如「432436274」),但是當我嘗試用addObject或insertObject:atIndex cmd將它添加到我的數組時,發生的事情。你能幫我嗎? – blaluma 2012-02-20 15:49:13

+0

代碼如下所示: 'GeneralSettings * sharedGS = [GeneralSettings sharedInstance];sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; [sharedGS.listArray insertObject:strCheckString atIndex:0]; %@「,sharedGS.listArray.count,[sharedGS.listArray objectAtIndex:0],sharedGS.strEAN);'%1 $ n% 代碼格式不起作用,或者我做錯了嗎? 'MyCode'? – blaluma 2012-02-20 15:53:26

+0

您可以設置委託和委託協議,但更簡單的方法是使用第二個選項。第二種方式非常簡單 - 只需將我的代碼複製到新的Objective-C類中即可。然後在UIViewController中實現一個prepareForSegue方法,並在目標視圖控制器(你的UITableViewController)上設置一個屬性。我會在上面回答prepareForSegue方法。 – 2012-02-20 17:37:08

3

@T。Ĵ 當採用這種方法 「2:如果你想要做它在故事板需要實現以下自定義SEGUE類:

實施」

,並根據以下的the document, 「配置目的地控制器當Segue前被觸發 的iOS執行以下任務時賽格瑞被觸發:

它實例化的目的地視圖控制器 它實例化,其保持用於SEGUE所有信息被觸發一個新的對象賽格瑞。注意:popover segue還提供了標識用於控制目標視圖控制器的彈出窗口控制器的屬性。 它調用源視圖控制器的prepareForSegue:sender:方法,傳遞新的segue對象和觸發segue的對象。 它調用segue的執行方法將目的地控制器帶到屏幕上。實際行爲取決於正在執行的繼續類型。例如,模式segue通知源視圖控制器顯示目標視圖控制器。 「 它釋放了segue對象,並且segue已完成。」

它再次實例化呈現的viewController,然後在調用「perform」的overrid方法之後釋放dealloc因此,最好選擇第一種方法或者推法根據the document委託。

感謝

相關問題