Objective c UIView transitionWithView具有多个xib文件的子视图

Objective c UIView transitionWithView具有多个xib文件的子视图,objective-c,uiview,uiviewcontroller,ios5,Objective C,Uiview,Uiviewcontroller,Ios5,我正在尝试在常规视图中创建子视图。单击此子视图中包含的按钮时,它将翻转并显示新的子视图。这将是为了模拟一张卡片在桌子上翻转。我有一个DetailViewController,它是一个空的xib,但当它加载时,它会加载另一个名为CardFrontViewController的控制器,该控制器实际上包含所有包含在xib中的子视图(卡的前面)。在子视图中单击按钮后,应加载CardBackViewController xib中包含的子视图 内部详细视图控制器 - (void)viewDidLoad {

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

内部详细视图控制器

- (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];
}
- (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];
}
内置卡FrontView控制器

- (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];
}
- (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未载入其中。
如果我在flip card方法中执行
[self.cardFrontContainerView addSubview:self.cardBackViewController.view]
操作,它会在内部加载整个xib,但我真的只需要内部视图。我不知道该怎么办

如果您只想加载一个带有一些iboutlet的视图,那么就不需要UIViewController

只需从您的
DetailViewController
中使用
[[NSBundle mainBundle]loadNibNamed:@“myViewNib”所有者:自选项:nil]
,如果存在与ne“卡”NIB对应的
IBOutlets
,它们将自动链接(到所有者)

如果您真的想要一个不同的类来处理这个“卡”(并且“拥有”IBOutlets),它是否一定需要从
UIViewController
继承
NSObject
有时也是一个很好的候选对象

最后,如果您真的想嵌套UIViewController,那么这只适用于iOS5。
为了支持以前的iOS版本,您最终必须手动调用某些UIViewController的生命周期方法(
willbeen,didbeen
…),将某些事件从主UIViewController传递到其detailViewController(如
willAnimateToRotation
),以及其他一些技巧

如果您只想加载一个带有一些iboutlet的视图,那么就不需要UIViewController

只需从您的
DetailViewController
中使用
[[NSBundle mainBundle]loadNibNamed:@“myViewNib”所有者:自选项:nil]
,如果存在与ne“卡”NIB对应的
IBOutlets
,它们将自动链接(到所有者)

如果您真的想要一个不同的类来处理这个“卡”(并且“拥有”IBOutlets),它是否一定需要从
UIViewController
继承
NSObject
有时也是一个很好的候选对象

最后,如果您真的想嵌套UIViewController,那么这只适用于iOS5。
为了支持以前的iOS版本,您最终必须手动调用某些UIViewController的生命周期方法(
willbeen,didbeen
…),将某些事件从主UIViewController传递到其detailViewController(如
willAnimateToRotation
),以及其他一些技巧

如果您只想在主视图中翻转子视图,我的答案在此处找到:

如果您只想在主视图中翻转子视图,我的答案在此处找到:

我觉得我正在尝试做一些相对简单的事情,仅仅是一个可以使用两个XIB在视图中翻转到另一个视图的视图,为什么它如此复杂,为什么很难在网上找到资源?根据你的回答,我想做的似乎不是这样做的。那么就用UIView吧!你可以调用上面的方法(
loadNibNamed:
)来加载一个特定的视图类,它有自己的outlets。我感觉我正在尝试做一些相对简单的事情,只是一个视图,可以使用两个XIB在视图中翻转到另一个视图,为什么它如此复杂,为什么很难在线找到资源?根据你的回答,我想做的似乎不是这样做的。那么就用UIView吧!您可以调用上面的方法(
loadNibNamed:
)来加载特定的视图类,它有自己的输出