инициализация rootViewController из разных XIB-файлов в зависимости от устройства, на котором работает приложение - PullRequest
0 голосов
/ 17 января 2011

Эй, ребята, у меня есть следующая проблема: у меня есть приложение для IPad, и теперь я хочу, чтобы оно также работало на IPhone.(Я знаю, что это должно быть наоборот, но я не могу изменить это).Итак, теперь я хочу решить, какое представление мне нужно, используя:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
     // The device is an iPad running iOS 3.2 or later.
}
else {
     // The device is an iPhone or iPod touch.
}

Это хорошо работает для всех представлений, кроме RootViewController.
Не важно, где я установил xib для RootViewController, он всегда отображаетодин я определил для IPad-приложения.

Это мой код в приложении-делегате:

viewController = [VoycerUniversalAppViewController sharedInstance]; 


UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.window addSubview:myNavigationController.view];   
//[self.window addSubview:self.vcSplashScreen.view];
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];

return YES;  

И это код в моем [VoycerUniversalAppViewController sharedInstance]:

+ (VoycerUniversalAppViewController*) sharedInstance 
{
    @synchronized(self) 
    {
        if(sharedInstance == nil) 
        {
            // only allocate here - assignment is done in the alloc method
            if (![AppState sharedInstance].loggedIn) 
            {
                [AppState sharedInstance ].loggedIn = FALSE;            
            }
        }
    }   
    return sharedInstance;
}

+ (id) allocWithZone:(NSZone*)zone {
    @synchronized(self) {
        if(sharedInstance == nil) {
            if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
            {
                // The device is an iPad running iOS 3.2 or later.
                NSLog(@"The device is an iPad running iOS 3.2 or later.");
                sharedInstance = [[super allocWithZone:zone] initWithNibName:@"VoycerUniversalAppViewController" bundle:nil];
            }
            else {
                // The device is an iPhone or iPod touch.
                NSLog(@"The device is an iPhone or iPod touch.");
                sharedInstance = [[super allocWithZone:zone] initWithNibName:@"VoycerUniversalAppIPhoneViewController" bundle:nil];
            }   
            // allocate and assign instance variable on first allocation                    
            return sharedInstance;
        }
    }
    return nil;
}

Я смотрел почти везде, я думаю, что если я пропустил какую-то настройку или что-то, но я не смог найти какую-либо.
У кого-нибудь из вас есть идея, почему постоянно загружает VoycerUnversalAppViewController вместо другой?
Обе Xibs связаны стот же класс.
Если решение довольно простое и очевидное, пожалуйста, не вините меня, я действительно новичок в xcode, IB и target-c (я пишу в target-c в течение 1 1/2 месяцасейчас).

Спасибо заранее.
Maverick1st.

1 Ответ

2 голосов
/ 17 января 2011

Для основного NIB в файле info.plist имеются настройки: NSMainNibFile и NSMainNibFile~ipad.

В файле NIB вы можете создать делегат приложения и настроить контроллер навигации.

...