【问题标题】:Conditionally presenting different nibs based on UI_USER_INTERFACE_IDIOM基于 UI_USER_INTERFACE_IDIOM 有条件地呈现不同的 nib
【发布时间】: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


    【解决方案1】:

    虽然我仍然不确定如何解决这个问题,但考虑到我尝试编写代码的方式,我开发了一种解决方法,方法是在我的数据模型中添加一个标志,以指示哪个源控制器正在传递数据到详细控制器,然后根据该标志的状态进行我的成语测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-23
      • 2021-02-08
      • 2014-02-28
      • 1970-01-01
      • 2023-04-07
      • 2018-03-11
      • 2013-02-17
      • 2013-05-28
      相关资源
      最近更新 更多