我正在尝试在常规视图中创建子视图。当单击该子视图中包含的按钮时,它将翻转并显示新的子视图。这将用于模拟在桌子上翻转的卡片。我有一个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加载到里面,但我真的只想在里面看一个视图。我不知道该怎么做。
答案 0 :(得分:2)
如果你想要的只是加载一个IBOutlets的视图,你不需要UIViewController。
只需使用[[NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:self options:nil]
中的DetailViewController
,如果存在与''卡'相对应的IBOutlets
NIB,则会自动将其链接到所有者。
如果你真的想要一个不同的类来处理这个'卡'(和'拥有'IBOutlets)它是否一定需要继承UIViewController
? NSObject
有时候也是一个很好的候选人。
最后,如果你真的想要嵌套UIViewControllers,这只适用于iOS5。
要支持以前的iOS版本,您最终必须手动调用一些UIViewController的生命周期方法(willAppear, didAppear
...),将主UIViewController中的某些事件传递给其detailViewController(如willAnimateToRotation
),并且也许还有其他一些技巧。
答案 1 :(得分:1)
如果您只想在主视图中翻转子视图,可以在此处找到适合我的答案:https://stackoverflow.com/a/9028156/1319615