2011-02-28 3 views
1

im은 빌드하기가 쉽습니다. 예를 들어 이메일 주소를 선택하여 테이블보기를 만들고 싶습니다. 뷰는 uitextField가있는 간단한 페이지로 푸시됩니다. 저장 버튼을 누르면 뷰 컨트롤러가 초기 페이지로 다시 이동하여 사용자가 다음 필드를 선택할 수 있습니다.문자열을 텍스트 필드에서 가져 와서 이전 viewController에 전달합니다.

내가 겪고있는 문제는 텍스트 파일에 입력 된 정보를 첫 번째보기 컨트롤러로 다시 전달하는 것입니다. 이건 정말 간단해야하지만, 난 그냥 노력하지 않는 시도는

무엇이 최선의 방법입니다.

감사합니다.

답변

2

위임 메서드를 사용하거나 더 간단 할지라도 설정 가능한 (속성/합성) 첫 번째보기 컨트롤러에서 인스턴스 변수 NSString * textEntry를 정의한 다음 스택에서 해당보기 컨트롤러에 액세스 할 수 있습니다. 나는이 NSNotificationCenter를 사용 할 것으로

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

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

첫 번째 라인은별로 실패하지 않거나 미래의 증거가 아닙니다. 'parentViewController'와 같은 것을 명시 적으로 링크하는 것이 더 안전합니다. – jv42

+0

동의. 이렇게하면 루트에 액세스 할 수 있습니다. 루트는 원하는 루트가 아닐 수도 있습니다. – PengOne

4

아마도이 문제는 거꾸로 생각할 것입니다. Cocoa와 같은 MVC 시스템에서 View Controller의 역할은 데이터가 아닌보기를 관리하는 것입니다. 업데이트중인 데이터를 저장할 모델 객체를 만듭니다. 뷰 컨트롤러를 만들 때 모델 객체를 전달합니다. 사용자가 변경 한 내용으로 모델을 업데이트 할 수 있습니다. 누가 전화했는지, 누구에게 돌아가는지 걱정하지 않아야합니다. 모델 객체를 업데이트해야하며, 다른 이해 당사자는 모델 객체를 읽어야합니다. 예를 들어 :

  • SettingsViewController 당신은 그것을 발표하기 전에 emailViewController.settings = self.settings처럼에 설정을 통과, 당신은 EmailViewController 같은 상세 뷰 컨트롤러에 뛰어 때 모델 객체는
  • Settings라는 것이다. 사용자가 변경을하면
  • , 그냥 self.settings.emailAddress = ...

이 코코아 패턴의 주요 특징 인 모델 로직에서보기 로직을 ​​분리 같은 객체를 업데이트합니다. 이 패턴과 싸우면, "여기에서 도착하기가 어렵습니다."라고 자주 생각하게 될 것입니다.

+0

+1 (거의 준비가 거의 같았습니다. with with your posts) –

1

가장 쉬운 방법 :

는 예를 들어, 밀어보기에, 그런 짓을. 의 TableView와의 ViewController에서

: 당신이로 돌아가려면 버튼을 누를 때

- (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]; 
} 
관련 문제