2011-02-28 24 views
1

IM我的應用程序,即時通訊特林建設,我想有一個表視圖,您選擇一行e.g電子郵件地址。視圖推到一個的UITextField一個簡單的頁面,當你點擊保存按鈕它彈出視圖控制器回到初始頁面,在這裏用戶可以選擇下一個字段。從文本字段以字符串,並將它傳遞給以前的viewController

,我有這個問題是傳遞文本文件回到第一個視圖控制器輸入的信息。這應該是很簡單的,但任何事情我嘗試是行不通的

什麼去解決這個問題的最好辦法。

謝謝

回答

2

您既可以使用委託方法,也可以更簡單地在第一個視圖控制器中定義一個實例變量NSString * textEntry,它可以被設置(屬性/合成),然後從堆棧訪問該視圖控制器。

例如,在推來看,這樣做:

FirstViewController *firstViewController = [[[self navigationController] viewControllers] objectAtIndex:0]; 

[firstViewController setTextEntry:[textfield text]]; 
+0

你的第一行是不是很失敗/面向未來:(。顯式鏈接類似'parentViewController'會更安全。 – jv42 2011-02-28 17:00:03

+0

同意。這將訪問根,這可能不是他想要的。 – PengOne 2011-02-28 17:08:26

4

您可能是想反思問題。在像Cocoa這樣的MVC系統中,View Controllers的工作是管理視圖,而不是數據。創建一個模型對象來保存你正在更新的數據。在創建視圖控制器時,將模型對象傳遞給它。它可以用用戶所做的更改來更新模型。它不應該擔心是誰叫它,或者它返回給誰。它應該只更新模型對象,其他感興趣的方應該讀取模型對象。作爲一個例子:

  • SettingsViewController將具有模型對象稱爲Settings
  • 當潛入的細節視圖控制器等EmailViewController,則呈現它之前通過設置像emailViewController.settings = self.settings
  • 當用戶作出的改變,只需更新等self.settings.emailAddress = ...

這從模型邏輯,這是可可模式的關鍵特徵的分離視圖邏輯的對象。如果你打這個模式,你會經常發現自己想:「它肯定是很難從這裏到達那裏。」

+0

+1(這幾乎是相同的,我差不多準備好了與當你來到後沿) – 2011-02-28 16:19:51

1

,我發現這是使用NSNotificationCenter做最簡單的方法。

在視圖控制器與TableView中:

- (void)updateRowValue:(NSNotification *)notification{ 
    NSDictionary *valuesDictionary = [[NSDictionary alloc] initWithDictionary: [notification userInfo] copyItems:NO]; 

    NSString *newString = [valuesDictionary objectForKey:@"StringVal"] 
} 

這是當行中的viewController選擇

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    TextFieldViewController *tfvc = [[TextFieldViewController alloc] init]; 
    [tfvc setPostNotificationString:@"updateRowValue"]; 
    [self.navigationController pushViewController:tfvc animated:YES]; 
} 

現在用文本框調用的方法,當你按下按鈕,返回到前面的viewController調用這個:

- (IBAction)saveButtonPressed{ 
    NSArray *valuesArray = [[NSArray alloc] initWithObjects:textField.text,nil]; 
    NSArray *keyArray = [[NSArray alloc] initWithObjects:@"StringVal",nil]; 
    NSDictionary *dictionary = [[[NSDictionary alloc] initWithObjects:valuesArray forKeys:keyArray] autorelease]; 

    [[NSNotificationCenter defaultCenter] postNotificationName:[self postNotificationString] object:self userInfo:dictionary]; 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 
相關問題