我在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/