2011-11-27 5 views
0

일반보기 내에서 하위보기를 만들려고합니다. 이 하위보기에 포함 된 단추를 클릭하면 뒤집어 새로운 하위보기가 표시됩니다. 이것은 테이블 위에 뒤집힌 카드를 시뮬레이트하기위한 것입니다. 내가 DetailViewController는 빈 xib이지만,로드되었을 때 실제로 xib에 포함 된 모든 하위 뷰 (카드의 앞부분)를 포함하는 CardFrontViewController라는 다른 컨트롤러를로드합니다. 하위보기 내부의 버튼을 누르면 CardBackViewController xib에 포함 된 하위보기가로드됩니다.UIView transitionWith 여러 xib 파일이있는 하위 뷰보기

내부 DetailViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    if (!self.cardFrontViewController) 
    { 
     self.cardFrontViewController = [[CardFrontViewController alloc] initWithNibName: @"CardFrontViewController" bundle: nil]; 
     [self.view addSubview: self.cardFrontViewController.view]; 
    } 

    [self configureView]; 
} 

내부 CardFrontViewController

- (IBAction)flipToAnswerCard:(id)sender 
{ 
    if (!self.cardBackViewController) 
    { 
     self.cardBackViewController = [[CardBackViewController alloc] initWithNibName: @"CardBackViewController" bundle: nil]; 
    } 

    [UIView transitionWithView: self.cardFrontContainerView 
         duration: 1.0 
         options: UIViewAnimationOptionTransitionFlipFromTop 
        animations: ^{ [self.cardFrontSubView removeFromSuperview]; 
         [self.cardFrontContainerView addSubview: self.cardBackViewController.cardBackSubView]; } 
        completion: nil]; 
} 

내가 카드, 카드 플립 뒤집어 버튼을 클릭 만 표시되는 뷰가 자기 것을 의미 비어 .cardBackViewController.cardBackSubView가로드되지 않았습니다. 플립 카드 방법 안에 [self.cardFrontContainerView addSubview: self.cardBackViewController.view]을 넣으면 내부에 전체 xib가로드되지만 실제로는 내부의보기가 필요합니다. 나는 여기서 무엇을해야할지 모르겠다.

답변

2

일부 IBOutlets를 사용하여 뷰를로드하는 것이면 UIViewController가 필요하지 않습니다.

DetailViewController[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil]을 사용하고 ne 'card'NIB에 해당하는 IBOutlets이 있으면 자동으로 링크됩니다 (소유자에게).

다른 클래스가이 '카드'를 처리하고 (IBOutlets를 '소유'하고 싶다면) 반드시 UIViewController에서 상속해야합니까? NSObject 가끔 좋은 후보가 될 수도 있습니다.

마지막으로 UIViewControllers를 실제로 중첩하려면 iOS5에서만 작동합니다. 이전 iOS 버전을 지원하려면 결국 수동으로 UIViewController의 라이프 사이클 메소드 (willAppear, didAppear ...)를 호출하고, 마스터 UIViewController의 특정 이벤트를 detailViewController (willAnimateToRotation과 같은)로 전달해야하며, 다른 트릭도 사용해야합니다. 당신은 단지 기본보기 내에서 파단 플립하려면

+0

두 개의 xib를 사용하여보기 안의 다른보기로 넘어가십시오. 왜 그렇게 복잡하며 온라인으로 자료를 찾는 것이 왜 어려운가요? 당신의 답을 바탕으로, 나는 그것을하려는 길인 것처럼 보이지 않습니다. – 5StringRyan

+0

그럼 UIView 만 사용하십시오! 위의 메소드 ('loadNibNamed :')를 호출하여 특정 뷰 클래스를로드 할 수있다. – Vinzzz