2013-03-29 2 views
5

TableViewController와 함께 한 컨테이너보기가있는 간단한 ViewController 있습니다. ViewController에서 외부 API 및 해당 데이터의 한 부분에서 데이터를로드하는 중 컨테이너에서 TableViewController로 전달해야합니다.컨테이너보기 컨트롤러에 대한 액세스

어떻게 할 수 있습니까? 감사합니다.

답변

13

컨테이너 뷰에 포함 된 컨트롤러는 상위 컨트롤러의 self.childViewController에서 액세스 할 수 있습니다. 그 중 하나만 있으면 self.childViewControllerers [0]에있게됩니다.


참고 : RD의 우수한 기술 에 대한이 아래의 코멘트에 설명; 테스트되고 작동하는 전형적인 예가 있습니다 : 이것은 전체 장면의 VC에서 간단히 나타납니다. 텍스트 식별자를 설정하려면 segue 자체 (즉, 연결 화살표 중간의 작은 기호)를 클릭하기 만하면됩니다. 여기

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
    if ([segue.identifier isEqualToString:@"containerLogin"]) 
     self.vcLogin = (LoginVC *)segue.destinationViewController; 

    if ([segue.identifier isEqualToString:@"containerStartNew"]) 
     self.vcStartNew = (StartNewVC *)segue.destinationViewController; 

    } 

스위프트에 그것을 어떻게 그냥 하나를보다가 있다면 도대체 무슨 일을 할,

override func prepareForSegue(segue:(UIStoryboardSegue!), sender:AnyObject!) 
    { 
    if (segue.identifier == "feedContainer") 
     { 
     feed = segue!.destinationViewController as! Feed 
     feed.someFunction() 
     } 
    } 
+0

RD (당신은 unwrappers에 조심해야)? 당신은 어떻게 알 수 있습니까? 어떤 아이디어? – Fattie

+2

@JoeBlow, 어떤 컨트롤러인지 다시 확인할 수있는 컨트롤러 클래스를 확인할 수 있습니다. 당신은 또한 내 대답 (임베디드 컨트롤러 segue.destinationViewController 될 것입니다)에서 말했듯이 그것을 대신 prepareForSegue 컨트롤러를 할당 할 수 있습니다. 이 메소드는 임베디드 컨트롤러에 대해 호출되므로이를 구현할 수 있으며 segue의 식별자를 확인하여 어느 컨트롤러인지 알 수 있습니다. 그것은 아마도 더 좋은 방법 일 것입니다. 특히 자녀가 둘 이상인 경우 특히 그렇습니다. – rdelmar

+0

테스트를 통해 완벽하게 작동합니다. 훌륭한. 놀라운 것은 더 일반적으로 알려져 있지 않습니다. – Fattie

관련 문제