viewWillAppear未在下级视图中调用

时间:2014-02-18 12:20:56

标签: ios ipad uiviewcontroller

我有一个UIViewController从nib加载子视图并将其添加到其视图层次结构中的子视图。现在这在iPhone故事板上工作得很好,但在iPad中虽然我确实看到了视图,但由于未调用viewWillAppear,视图上的UIImageView未初始化。

这是主视图控制器(加载子视图的代码)的代码

SubViewController *controller = [[SubViewController alloc] init];
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:@"x"] owner:controller options:nil];
UIView *subView = bundle[0];
[self addChildViewController:controller];

if (isPhone)
{
    CGRect frame;
    frame.origin.x = 0;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;
    view.frame = frame;
    [self.scrollView addSubview:view];
 }
 else
 {
     view.frame = self.viewSlot.frame;
     [self.viewSlot addSubview:view];
 }

唯一的区别是在iPhone上它被添加到UIScrollView,而在iPad上它被添加到UIView

viewSlotscrollView都是正确初始化和工作的出口。即使在iPad上,我确实看到了我的视图(我改变了它的背景颜色),只是初始化(viewWillAppear)没有运行。

1 个答案:

答案 0 :(得分:0)

经过一段时间的比赛后,我已经成功了解了这一点。首先,我选择以不同的方式初始化控制器:

SubViewController *controller = [[SubViewController alloc] initWithNibName:[@"X" stringByAppendingString:idiom] bundle:nil];

我有一个例外,显示问题:view插座未设置。本故事的教训:不仅仅是alloc - init控制器,请使用initWithNibName初始化工具。由于一些尚未发现的iPhone / iPad之间的差异,早期的方法仍然适用于iPhone,这仍然很奇怪。