【问题标题】:UIView transitionWithView a subview with multiple xib filesUIView transitionWithView 带有多个xib文件的子视图
【发布时间】:2011-11-27 03:33:59
【问题描述】:

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

当我点击按钮翻转卡片时,卡片翻转,但是显示的视图是空的,这意味着self.cardBackViewController.cardBackSubView里面没有加载。 如果我在翻转卡方法中执行[self.cardFrontContainerView addSubview: self.cardBackViewController.view],它会在里面加载整个xib,但我真的只是想要一个里面的视图。我不确定在这里做什么。

【问题讨论】:

    标签: objective-c uiview uiviewcontroller ios5


    【解决方案1】:

    如果您只想加载带有一些 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),也许还有一些其他技巧.

    【讨论】:

    • 我感觉我在尝试做一些比较简单的事情,只是一个视图可以使用两个xibs在一个视图中翻转到另一个视图,为什么这么复杂,为什么很难网上找资源?根据您的回答,我想做的似乎不是这样做的方法。
    • 那就用 UIView 吧!你可以调用上面的方法 (loadNibNamed:) 来加载一个特定的 View 类,它有自己的 outlet
    【解决方案2】:

    如果您只想在主视图中翻转子视图,可以在这里找到对我有用的答案:https://stackoverflow.com/a/9028156/1319615

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2013-10-08
      • 2010-10-26
      • 2014-02-10
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多