【问题标题】:Correct adding and UIViewController to another正确添加和 UIViewController 到另一个
【发布时间】:2014-06-08 22:57:28
【问题描述】:

今晚面临这个问题:

- (void)loadView {
    VC *vc = [[VC alloc] initWithStyle:UITableViewStyleGrouped];
    [self addChildViewController:vc];
    [vc removeFromParentViewController];
    [self setView:vc.view];
}

得到了炸弹:

uncaught exception 'UIViewControllerHierarchyInconsistency', reason:
'A view can only be associated with at most one view controller at a time!

问:我们如何在没有AddSubView 的情况下直接将vc 及其所有功能添加到当前的ViewController

【问题讨论】:

  • loadView 是视图控制器的方法吗?然后创建一个新的视图控制器并窃取它的视图 (vc.view) 并将其分配给 self.view。这有什么意义?你真正想达到什么目标?告诉我们更多关于你在做什么。我想我们找到了实现它的正确方法。到目前为止,这段代码对我来说没有多大意义。
  • Hermann,对不起,下次会提供更多细节。看来问题已经解决了。无论如何感谢您的回复。

标签: ios objective-c ios7 uiviewcontroller


【解决方案1】:

将表视图控制器的视图添加为当前视图的子视图。您不应该在vc 上调用removeFromParentViewController,因为这基本上会否定之前的行。设置框架以匹配父级也是一个好主意。

- (void)loadView 
{
    [super loadView]; // this will create a basic view

    VC *vc = [[VC alloc] initWithStyle:UITableViewStyleGrouped];

    [self addChildViewController:vc];

    vc.view.frame = self.view.bounds;
    vc.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:vc.view];

    [vc didMoveToParentViewController:self];
}

【讨论】:

  • 尼尔,谢谢,实际上我也是这样做的。但也许我们有一种方法可以在不加载基本视图的情况下附加任何其他视图?或者(似乎)我们必须先加载基本视图。
  • 您必须至少拥有一个您的父视图控制器必须拥有的视图(并且不能由您的辅助视图控制器拥有)。如果你愿意,你可以创建一个完整的自定义视图,而不是使用 [super loadView]; 像:[self setView:[[UIView alloc] init]];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
相关资源
最近更新 更多