2009-08-07 3 views
0

navController 및 tableViewController를 설정하여 테이블 행을 선택하면 navController의 스택에 대한 상세보기가 표시되고 선택한 행에 대한 자세한 정보가 표시됩니다 . 자세히보기에서는 정보를 표시하는 데 단일 UILabel을 사용하고 상세보기 컨트롤러의 viewDidLoad에서 레이블의 text 속성 값을 설정합니다.자세히보기로 전환 할 때 UILabel.text를 두 번 이상 변경할 수 없습니다.

처음으로 행을 선택하면 세부 정보보기에 예상 텍스트가 표시됩니다. 테이블보기로 돌아가서 다른 행을 선택하면 상세보기에는 처음과 같은 텍스트가 나타납니다.

세부보기 컨트롤러가 해제 된 후 navController의 스택에 푸시 된 후 nil로 설정된 코드 샘플을 보았습니다. 이 코드를 코드에 추가하면 문제가 사라지지만 그 이유는 알 수 없습니다.

누군가 여기서 내게 무슨 일이 일어 났는지 설명 할 수 있습니까?

감사합니다.

답변

1

은 ...보기가로드 될 때만 호출됩니다. 다시 말하면, 뷰 컨트롤러를 처음 생성 할 때 메모리에 생성 될 때입니다. 모든 사용자 지정 기반 입력 데이터는 대신 -viewWillAppear:에서 수행해야하며, 네비게이션 컨트롤러에 밀어 넣기 전에 매번 호출됩니다.

일반적으로 새로운 뷰 컨트롤러는 더 이상 내게 속하지 않으므로 스택에 밀어 넣은 후 즉시 해제됩니다.이 컨트롤러는 내비게이션 컨트롤러에 속합니다. 이 경우 다음에 스택에 푸시 할 때 새 객체이기 때문에 뷰를 다시로드합니다.

- (void) tableView:(TableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIViewController *screen = [[MyNewViewController alloc] initWithData:[data objectAtIndex:indexPath.row]]; 
    [self.navigationController pushViewController:screen animated:YES]; 
    [screen release]; 
} 

주요 아이디어는하지만, 당신이보기 -viewWillAppear: 범위 내에서 실시 할 필요가 볼 때마다 변경 될 수 있습니다 데이터를 기준으로보기를 사용자 정의하는 것입니다. Interface Builder에서 볼 수있는 것보다 더 많은 것을 사용자 정의하여보고있는 데이터에 상관없이 변경되지 않는 사항을 변경하려면 -viewDidLoad

+0

에드, 감사합니다. 그게 완벽하게 이해하고 내 코드는 이제 둘 다 작동하고 나는 그 이유를 이해합니다! – skantner

관련 문제