2012-03-23 1 views
1

저는 스토리 보드를 사용하도록 어플리케이션을 변환했습니다. 저는 이것이 간단한 문제라고 확신합니다. 그러나 어떻게 든 올바른 XIB 방식을 이해하지 못하는 것 같습니다. 우리가 오래된 XIB 세계에서 왔을 때 오는 것입니다.스토리 보드를 사용할 때 UITabBarController로보기간에 데이터 전달

하위 섹션 중 하나에는 UITabBarController가 포함되어 있으며 각 하위 뷰에는 하위 뷰가 있습니다.

이 탭 세트를 실행하는 작업은 완벽하게 작동합니다. 나는 segue를 감지하고 내 (사용자 지정) UITabBarController 내에서 일부 데이터 속성을 설정합니다.

다음으로, 해당 데이터를 생성 할 때 해당 데이터를 하위 뷰에 전달할 수 있기를 바랍니다. 하지만이 탭은 단순히 '관계'이며 segue가 아니기 때문에 다른 곳에서는 할 수 없습니다. 'prepareForSegue'함수를 덮어 씁니다.

이전 XIB 유니버스에서 일부 IBOutlet을 탭 컨트롤러와 하위보기간에 함께 바인딩하기 만하면됩니다. 하지만 부모님과 어린이는 별개의 '장면'이기 때문에 스토리 보드에서는 할 수 없습니다.

내 UITabBarController가 클래스가 자신의 대표, 재정의 'didSelectViewController'을 구현하게하고 그것이 첫 번째 탭 때 호출되지 않습니다는 사실을 제외하고 'self.delegate = 자기' 거의 작품을하고 시도했습니다

처음에는보기가 표시됩니다.

"올바른"(또는 '최상의') 방법은 무엇입니까? 제발 '세상 변수'영역 인 것처럼 앱 위임자에게 어떤 가치를 주거나 설정하지 말아주세요.

답변

1

UITabBarController의보기 컨트롤러를 반복하여 봅니다. 이 예제에서 setData 메소드는 UITabBarController에 segue에서 호출되고 자식 뷰 컨트롤러를 반복하며 하위 컨트롤러에서 비슷한 호출을 만들어 데이터를 설정합니다.

- (void)setData:(MyDataClass *)newData 
{ 
    if (_myData != newData) { 
     _myData = newData; 

     // Update the view. 
     [self configureView]; 
    } 

} 

- (void) configureView { 
     for (UIViewController *v in self.viewControllers) 
     { 
      if ([v isKindOfClass:[MyDetailViewController class]]) 
      { 
       MyDetailViewController *myViewController = v; 
        [myViewController setData:myData]; 
      } 
     } 
}