UIView transitionWith查看具有多个xib文件的子视图

时间:2011-11-27 03:33:59

标签: objective-c uiview uiviewcontroller ios5

我正在尝试在常规视图中创建子视图。当单击该子视图中包含的按钮时,它将翻转并显示新的子视图。这将用于模拟在桌子上翻转的卡片。我有一个DetailSController,它是一个空的xib,但是当它被加载时,它会加载另一个名为CardFrontViewController的控制器,该控制器实际上包含xib中包含的子视图(卡片的正面)。一旦子视图中的按钮,它应该加载CardBackViewController xib中包含的子视图。

Inside 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];
}

当我单击按钮翻转卡片时,卡片会翻转,但显示的视图为空,这意味着self.cardBackViewController.cardBackSubView未加载到内部。 如果我在翻转卡方法中做[self.cardFrontContainerView addSubview: self.cardBackViewController.view],它会将整个xib加载到里面,但我真的只想在里面看一个视图。我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

如果你想要的只是加载一个IBOutlets的视图,你不需要UIViewController。

只需使用[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil]中的DetailViewController,如果存在与''卡'相对应的IBOutlets NIB,则会自动将其链接到所有者。

如果你真的想要一个不同的类来处理这个'卡'(和'拥有'IBOutlets)它是否一定需要继承UIViewControllerNSObject有时候也是一个很好的候选人。

最后,如果你真的想要嵌套UIViewControllers,这只适用于iOS5。 要支持以前的iOS版本,您最终必须手动调用一些UIViewController的生命周期方法(willAppear, didAppear ...),将主UIViewController中的某些事件传递给其detailViewController(如willAnimateToRotation),并且也许还有其他一些技巧。

答案 1 :(得分:1)

如果您只想在主视图中翻转子视图,可以在此处找到适合我的答案:https://stackoverflow.com/a/9028156/1319615