Условное представление разных перьев на основе UI_USER_INTERFACE_IDIOM - PullRequest
0 голосов
/ 23 июня 2011

Я обновляю приложение до универсального.У меня есть набор перьев для отображения контроллера представления (назовем его 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 }

... но при выполнении этих тестов, для которых контроллер представления был вытолкнут из контроллера детали, они не оцениваются как истинные, иидиомные тесты не запускаются, и поэтому кончики не загружены.

Что я могу делать неправильно или как эффективно определить контроллер, который вызвал детальный контроллер, чтобы я мог загрузить правильные кончики?

1 Ответ

0 голосов
/ 23 июня 2011

Хотя я до сих пор не уверен, как решить эту проблему, учитывая то, как я пытался ее кодировать, я разработал обходной путь, добавив флаг в свою модель данных, который дает мне указание того, какой контроллер источника передаетданные в подробный контроллер, а затем основываю мой тест идиомы на состоянии этого флага.

...