【发布时间】:2011-09-20 18:42:49
【问题描述】:
我正在将一个应用升级为通用。我有一组 nib 来显示视图控制器(我们称之为 DetailViewController,它是特定于 iPhone 和 iPad 的。
由于我支持
为了逐步测试,我有一个方法来做测试:
- (BOOL)loadNibFileForIdiom
{ NSArray* topLevelObjs = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"DetailViewController~iPad" owner:self options:nil];
if (topLevelObjs == nil)
{
NSLog(@"Error! Could not load myNib file.\n");
return NO;
}
return YES;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
topLevelObjs = [[NSBundle mainBundle] loadNibNamed:@"DetailViewController" owner:self options:nil];
if (topLevelObjs == nil)
{
NSLog(@"Error! Could not load myNib file.\n");
return NO;
}
return YES;
}
return NO;
}
正如我所说,当在细节控制器的 viewWillAppear 中调用该方法并且此视图控制器是从表视图控制器推送的(实际上是从选项卡栏项目调用的)时,这可以正常工作。请注意,ChartViewController 也是标签栏上的第一项。
为了在从表格或图表中调用时加载替代笔尖,我尝试在此方法中添加条件测试,从而围绕上面的代码:
if (self.parentViewController == TableViewController) { ... do idiom tests and load appropriate nib for DetailViewController or DetailViewController~iPad nib }
和
if (self.parentViewController == ChartViewController) { ... do idiom tests and load appropriate nib for DetailViewController2 or DetailViewController2~iPad nib }
...但是在为哪个视图控制器执行这些测试时,从哪个视图控制器中推送了详细信息控制器,它们不会被评估为 true,并且不会运行成语测试,因此不会加载 nib。
我可能做错了什么或者确定调用细节控制器的控制器的有效方法是什么,以便我可以加载正确的 nib?
【问题讨论】:
标签: ios nib idioms viewcontroller