2014-05-10 2 views
0

컨테이너보기를 사용하는 iPad 앱을 만들고 있습니다.하위 컨테이너보기의 UILabel이 업데이트되지 않습니다.

스토리 보드를 사용하므로 2 UIViewControllers과 1 UITableViewController을 추가했습니다.

하나는 UIViewController입니다. 2 개의 컨테이너 뷰를 추가하고 각각의 뷰를 UITableViewController 및 다른 UIViewController에 임베드 세그먼트를 통해 연결했습니다.

두 컨테이너보기는 앱 시작시 표시됩니다.

배열로 tableview를 채 웠고 문자열을 다른 UIViewController에서 didselectrowatindexpath으로 전달하려고합니다.

문자열이 nslogging에 의해 viewcontroller에 전달 된 것을 볼 수 있지만보기 컨트롤러의 레이블은 변경되지 않습니다. 여기

은 tableviewcontroller의 didselectrowatindexpath입니다 :

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    DetailVC *detailVC = [[DetailVC alloc] init]; 
    NSString *urlString = [siteAddresses objectAtIndex:indexPath.row]; 
    detailVC.webAddress = urlString; 

    [detailVC viewWillAppear:YES]; 
} 

을 여기에 잡 뷰 컨트롤러의 m 파일입니다

@synthesize webAddress, webview, webURL; 

-(void)viewWillAppear:(BOOL)animated 
{ 

    self.webAddress = webAddress; 
    webURL.text = webAddress; 
    NSLog(@"%@",webAddress); 
    NSLog(@"%@", webURL.text); 
    [super viewWillAppear:animated]; 
} 

모든 콘센트와 연결이 올바른지,하지만 여전히 레이블 텍스트 변경되지 않습니다.

저는 스토리 보드를 사용하여 컨테이너보기를 소스 코드를 통해 컨트롤러에 연결합니다.

도움이 매우 감사합니다.

+0

실제로 라벨을 업데이트하지 않는다고 생각합니다. 이것이 일어날 수있는 많은 다른 가능성들이 있지만, 가장 명백한 것은'webURL'이 널 포인터라는 것입니다. –

+0

'didSelect ...에 새 컨트롤러를 할당하는 것 같습니다.'대신 childController에 속성을 설정하면됩니다 (부모의 childViewControllerers 속성을 통해 임베디드 컨트롤러에 대한 참조를 얻을 수 있습니다). – Alladinian

답변

1

alloc init으로 새 상세 뷰를 작성합니다. 대신 기존 상세보기를 참조해야합니다 (예 : parentViewController을 통해

+0

parentViewController를 통해 세부 뷰를 어떻게 참조 할 수 있습니까? – kupilot

+0

컨테이너 컨트롤러에 디테일 뷰 컨트롤러를 보유하는'@ 속성 '을 부여하십시오. 그런 다음'self.parentViewController.detailViewController'를 사용하십시오. – Mundi

1

다른 포스터에서 지적한 것처럼 didSelectRowAtIndexPath에서보기 컨트롤러의 새 인스턴스를 만드는 중입니다. 잘못된 것입니다.

싶은 것은 각 임베드 SEGUE의 SEGUE 식별자를 확인 있도록 prepareForSegue를 작성하는 것입니다, 당신은 나중에 참조해야합니다 각 뷰의 아이 뷰 컨트롤러에 대한 포인터를 저장합니다

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString: @"detailVC"] 
    self.detailVC = segue.destinationViewController; 
    else if ([segue.identifier isEqualToString: @"childVC2"] 
    self.childVC2 = segue.destinationViewController; 
    else if ([segue.identifier isEqualToString: @"childTableVC"] 
    self.childTableVC = segue.destinationViewController; 
} 

(물론 당신은 당신의 segues에 의미있는 식별자와 스토리 보드를 설정하고 일치하는 위의 코드를 변경해야합니다.)

는 그런 다음 didSelectRowAtIndexPath 방법 힘은 다음과 같습니다

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.detailVC updateWebAddressWithString: urlString]; 
} 

VC의 viewWillAppear : animated 메소드를 직접 호출해서는 안됩니다.

대신 새 URL 문자열을 사용하여 웹보기로 전달한 후 업데이트를 트리거하는 updateWebAddressWithString 메소드를 작성하십시오.

+0

테이블 뷰 컨트롤러는 실제로 하위 뷰 컨트롤러이고 상세 뷰 컨트롤러도 하위 뷰 컨트롤러이므로 didselectrowatindexpath에 [self.detailVC ...]를 추가해도 작동하지 않습니까? 어떻게하면 tableviewcontroller에서 세부 자식보기 컨트롤러에 액세스 할 수 있습니까? 감사 – kupilot

관련 문제