我已经从
重命名了一些nib文件EEMSystemDetailElpho到EEMSystemDetailElphoView, EEMSystemDetail转移到EEMSystemDetailTransferView, EEMSystemDetailProbing到EEMSystemDetailProbingView。
他们有相应的文件所有者,但仍未改变。
它们都是UIScroll视图的一部分,并且UIScroll视图已加载并显示,但是在重命名nib文件后,我的三个子视图都不可见。我像以前一样通过分配和初始化控制器来加载视图。
NSMutableArray *controllers = [[NSMutableArray alloc] init];
elphoController = [[EEMSystemDetailElphoController alloc] init];
[controllers addObject:elphoController];
CGRect frame = scrollView.frame;
frame.origin.x = 0;
frame.origin.y = 0;
elphoController.view.frame = frame;
[scrollView addSubview:elphoController.view];
transferController = [[EEMSystemDetailTransferController alloc] init];
[controllers addObject:transferController];
frame.origin.x = frame.size.width;
frame.origin.y = 0;
transferController.view.frame = frame;
[scrollView addSubview:transferController.view];
probingController = [[EEMSystemDetailProbingController alloc] init];
[controllers addObject:probingController];
frame.origin.x = frame.size.width * 2;
frame.origin.y = 0;
probingController.view.frame = frame;
[scrollView addSubview:probingController.view];
viewControllers = controllers;
[controllers release];
我注意到如果我将旧的.nib文件添加到Library / Application Support / Iphone Simulator /(当前版本)/ Applications /(特定应用程序)下的特定应用程序文件夹中,则会显示视图。这表明XCode在某种程度上没有注意到我对文件名的更改。运行应用程序时没有错误,我的观点没有显示。
有什么想法?
答案 0 :(得分:2)
如果笔尖名称与管理它的视图控制器名称不同,则应使用
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
所以例如你的第一个控制器将被加载
elphoController = [EEMSystemDetailElphoController alloc] initWithNibName:@"EEMSystemDetailElphoView" bundle:nil]];
这是UIViewController
根据Apple的文档
如果为nibName参数指定nil,则必须覆盖loadView方法并在那里创建视图,或者必须在包中提供一个nib文件,其名称(不带.nib扩展名)与视图控制器的名称相匹配类。 (在后一种情况下,类名将成为存储在nibName属性中的名称。)如果不执行这些操作,则视图控制器将无法加载其视图。
(强调我的)
仅当init
没有笔尖时才使用vanilla UIViewController
,或者保证笔尖名称和视图控制器名称相同。即使在后一种情况下,您确实应该使用指定的初始值设定项并为nil
和nibName
nibBundle
答案 1 :(得分:0)
尝试删除连接并连接回各自的文件所有者。 从模拟器和应用程序文件夹中删除构建并再次运行它。
希望它有效。TNX
答案 2 :(得分:0)
当你重命名文件时,连接就会消失。所以请找到这个。