2011-06-22 33 views
0

我正在將應用程序升級爲Universal。我有一組筆尖來顯示一個視圖控制器(我們稱之爲DetailViewController,這是專門針對iPhone和iPad的)根據UI_USER_INTERFACE_IDIOM有條件地呈現不同的筆尖

因爲我支持的設備是< iOS 4.0我不能僅僅依靠使用〜 ipad後綴加載正確的DetailViewController nibs的筆尖,所以我有一個方法,加載基於UI_USER_INTERFACE_IDIOM測試的筆尖。這工作除了但它變得更加複雜,因爲我從兩個不同的源控制器呈現此視圖控制器:一個是表另一個是帶有按鈕的圖形圖表,用於調用視圖控制器,並且基於哪個視圖控制器調用它的詳細視圖的格式是不同的,所以我有兩組不同的nib集合,即使接口和實現文件是相同的爲DetailViewController。

爲了檢驗這一增量我必須做測試方法:

- (BOOL)loadNibFileForIdiom 

{ 的NSArray * topLevelObjs =零;

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 } 

...但是當執行這些視圖控制器的詳細控制器從其推送的測試時,它們不會被評估爲真,並且成語測試未運行,因此未加載筆尖。

我可能會做什麼錯,或者什麼是確定調用細節控制器的控制器的有效方法,以便我可以加載正確的筆尖?

回答

0

雖然我還不確定如何解決這個問題給我的方式,我試圖編寫它,我開發了一個解決方法,通過添加一個標誌,我的數據模型,讓我指示哪個源控制器傳遞將數據傳遞給細節控制器,然後將我的慣用語測試基於該標誌的狀態。