2012-12-31 126 views
5

可能重複:
dismissModalViewController AND pass data back如何將值傳遞給父視圖控制器?

我新的iOS開發並停留在這個問題:

我用故事板,並有導航控制器,vcA,其中顯示TableView,其中顯示來自MutableArray(其在相同類別的viewdidload中初始化)的一些數據。在選擇任何單元格之後,第二個視圖控制器vcB顯示爲其中包含TextField以及一個名爲「添加到列表」的按鈕。

我想要的是,當我在TextField中輸入一些文本並按下「添加到列表」按鈕時,文本應該被添加到前一個視圖的數組中(在TableView中顯示),當我點擊vcB的導航欄上的「返回」按鈕vcA應顯示更新的TableView及其中的新條目(位於列表頂部)。基本上我想將vcBTextField中的文字添加到vcA的數組中,並在點擊返回按鈕後顯示新的數組。

我已經搜索了很多關於這個問題,似乎發現委託和協議是達到預期結果的方式,但我無法理解委託。

+2

[你試過了什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Foggzie

+2

這個問題已經被問過太多次了。 http://stackoverflow.com/a/6204427/1271826 – Rob

回答

13

我在此示例中呈現本身作爲模態的第二視圖控制器:

在第二視圖控制器.h文件:

@protocol SecondViewControllerDelegate <NSObject> 
- (void)addItemViewController:(id)controller didFinishEnteringItem:(NSString *)item; 
@end 

@interface SecondPageViewController : UIViewController <UITextViewDelegate> 
{ 
    NSString *previouslyTypedInformation; 
} 

@property (weak, nonatomic) IBOutlet UITextView *textView; 
@property (nonatomic) NSString *previouslyTypedInformation; 
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate; 

在第二視圖控制器米文件確保合成屬性和加然後添加這樣的:在所述第一視圖控制器.h文件

- (IBAction)done:(id)sender 
{ 
    NSString *itemToPassBack = self.textView.text; 
    NSLog(@"returning: %@",itemToPassBack); 
    [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack]; 
    //dismiss modal view controller here 
} 

然後將其設置爲代表:

@interface FirstPageViewController: UIViewController <SecondViewControllerDelegate> 
@property (nonatomic) NSString *returnedItem; 

然後在第一個視圖控制器的.m文件合成和添加方法:

- (void)addItemViewController:(SecondPageViewController *)controller didFinishEnteringItem: (NSString *)item 
{ 
    //using delegate method, get data back from second page view controller and set it to property declared in here 
    NSLog(@"This was returned from secondPageViewController: %@",item); 
    self.returnedItem=item; 

    //add item to array here and call reload 
} 

現在你有返回什麼文字!您可以在第一視圖控制器的viewDidLoad的字符串添加到您的陣列,並呼籲

[self.tableView reloadData]; 

,它應該工作。

+1

只是另外,你在第一個初始化你的第二個視圖控制器,做: secondView.myDelegate = self; – hyd00

+0

gg13,謝謝!您的答案應該被稱爲「如何輕鬆創建代表」。我對此感到困惑,現在甚至沒有找到它,我理解它們。 –

+0

非常感謝你... –

相關問題