我在RootViewController(这是一个UITableViewController)中有以下代码。单击导航栏中的按钮,然后在模拟器中显示下一个视图时,将执行此代码。但是,不会显示在TripDetailsController管理的视图中绘制的子视图(UITextLabels,UIButtons)。同样,在屏幕顶部的导航栏中,未显示原始视图的“后退”按钮,但是当我单击导航栏的左侧时,它确实会转换回原始视图。


TripDetailsController.view链接到Interface Builder中的TripDetailsView(UIView)
tdController确实有一个值,因此看起来好像已加载
TripDetailsController在单独的NIB文件中
使用iPhone SDK 2.2.1(还不是3.0)


码:

 TripDetailsController *tdController = [[TripDetailsController alloc]
                  initWithNibName:@"TripDetailsController" bundle:nil];
 [self.navigationController pushViewController:tdController animated:YES];
 [tdController release];


在TripDetailsController类中,我添加了viewDidLoad方法,如下所示:

码:

- (void)viewDidLoad {
  [super viewDidLoad];
  self.navigationItem.title = @"Reis Details";

  NSLog(@"Subviews: %@", self.view.subviews);
  UILabel *l = [self.view.subviews objectAtIndex:0];
  NSLog(@"Subview 0 bounds: %@", l.bounds);
}


以下日志消息确实显示了子视图,但未设置边界:

码:

6/18/09 Jun 18, 2009   10:06:00 PM ReisAdvies[11226] Subviews: (
    <UILabel: 0x56f250>,
    <UILabel: 0x56f5a0>,
    <UILabel: 0x56f6b0>,
    <UILabel: 0x56f780>
)
6/18/09 Jun 18, 2009   10:06:00 PM ReisAdvies[11226] Subview 0 bounds: (null)


在Interface Builder中,“标签大小”选项卡确实显示X / Y / W / H的值。感觉我必须触发它来执行一些布局活动,但是在viewDidLoad()中调用layoutSubviews并没有帮助。
有什么想法可能是这里的问题吗?

最佳答案

在Interface Builder中找到了解决方案:


在NIB文件中,我没有包含UIWindow,因此我将UIWindow添加到NIB文件中,并将TripDetailsController.view出口连接到新添加的UIWindow。
文件的所有者视图属性连接到TripDetailsView(UIView)
File的Owner类设置为UIViewController


现在它可以按预期工作了。

不能100%知道这是否是“方法”,但至少对我来说似乎行得通。

关于iphone - 未使用initWithNibName从NIB加载的 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1011093/

10-10 07:06