IM我的應用程序,即時通訊特林建設,我想有一個表視圖,您選擇一行e.g電子郵件地址。視圖推到一個的UITextField一個簡單的頁面,當你點擊保存按鈕它彈出視圖控制器回到初始頁面,在這裏用戶可以選擇下一個字段。從文本字段以字符串,並將它傳遞給以前的viewController
,我有這個問題是傳遞文本文件回到第一個視圖控制器輸入的信息。這應該是很簡單的,但任何事情我嘗試是行不通的
什麼去解決這個問題的最好辦法。
謝謝
IM我的應用程序,即時通訊特林建設,我想有一個表視圖,您選擇一行e.g電子郵件地址。視圖推到一個的UITextField一個簡單的頁面,當你點擊保存按鈕它彈出視圖控制器回到初始頁面,在這裏用戶可以選擇下一個字段。從文本字段以字符串,並將它傳遞給以前的viewController
,我有這個問題是傳遞文本文件回到第一個視圖控制器輸入的信息。這應該是很簡單的,但任何事情我嘗試是行不通的
什麼去解決這個問題的最好辦法。
謝謝
您既可以使用委託方法,也可以更簡單地在第一個視圖控制器中定義一個實例變量NSString * textEntry,它可以被設置(屬性/合成),然後從堆棧訪問該視圖控制器。
例如,在推來看,這樣做:
FirstViewController *firstViewController = [[[self navigationController] viewControllers] objectAtIndex:0];
[firstViewController setTextEntry:[textfield text]];
您可能是想反思問題。在像Cocoa這樣的MVC系統中,View Controllers的工作是管理視圖,而不是數據。創建一個模型對象來保存你正在更新的數據。在創建視圖控制器時,將模型對象傳遞給它。它可以用用戶所做的更改來更新模型。它不應該擔心是誰叫它,或者它返回給誰。它應該只更新模型對象,其他感興趣的方應該讀取模型對象。作爲一個例子:
SettingsViewController
將具有模型對象稱爲Settings
EmailViewController
,則呈現它之前通過設置像emailViewController.settings = self.settings
。self.settings.emailAddress = ...
這從模型邏輯,這是可可模式的關鍵特徵的分離視圖邏輯的對象。如果你打這個模式,你會經常發現自己想:「它肯定是很難從這裏到達那裏。」
+1(這幾乎是相同的,我差不多準備好了與當你來到後沿) – 2011-02-28 16:19:51
,我發現這是使用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];
}
你的第一行是不是很失敗/面向未來:(。顯式鏈接類似'parentViewController'會更安全。 – jv42 2011-02-28 17:00:03
同意。這將訪問根,這可能不是他想要的。 – PengOne 2011-02-28 17:08:26