Выберите вид для запуска для iPad и iPhone

в моем первом приложении, предназначенном только для iPhone, я решил также реализовать возможность использования на iPad, и первое, что я хотел выбрать, чтобы использовать представление, если бы оно было при открытии iPhone или iPad, в моем делегате я написал:

NSString *devy = [[UIDevice currentDevice]model];
if ([devy isEqualToString:@"iPad"]) {
    [window addSubview:viewController.viewCpuIpad];
    [window makeKeyAndVisible]; 
} else {
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];    
}

Когда с iPhone все в порядке, но когда я открываю его на iPad, отображается только пустой экран .... где не так?

Благодарность


person AleMal    schedule 14.12.2011    source источник
comment
viewController.viewCpuIpad пусто?   -  person JoePasq    schedule 15.12.2011
comment
viewCpuIpad - это UIView с большим количеством изображений и данных.   -  person AleMal    schedule 15.12.2011
comment
я вызываю код в методе - (void) applicationDidFinishLaunching: (UIApplication *) приложение делегата   -  person AleMal    schedule 15.12.2011
comment
Вы пробовали регистрировать информацию об этом и viewController? Также попробуйте войти devy, чтобы увидеть, что там хранится.   -  person JoePasq    schedule 15.12.2011
comment
ммм в отладке я читал: ожидается, что приложения будут иметь корневой контроллер представления в конце запуска приложения   -  person AleMal    schedule 15.12.2011
comment
Не используйте [[UIDevice currentDevice] модель], чтобы проверить, iPad или нет. Вместо этого используйте UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPad.   -  person hoshi    schedule 15.12.2011


Ответы (2)


Рекомендуемый способ Apple (взятый из шаблона проекта универсального приложения Xcode):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
    } else {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

Если вы не хотите использовать IB, вы можете создать свое представление в методе loadView контроллера представления, например:

- (void)loadView
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.view = // create view for iPad.
    } else {
        self.view = // create view for iPhone.
    }
}

(UI_USER_INTERFACE_IDIOM () - это макрос для поддержки iOS 3.1 и более ранних версий.)

person hoshi    schedule 15.12.2011

Когда вы запускаете на iPad, вместо того, чтобы звонить,

[окно addSubview: viewController.viewCpuIpad];

попробуй,

viewController.view = viewCpuIPad;

[window addSubview: viewController.view];

Я предлагаю вам не обновлять свойство viewController.view при запуске на iPad.

По умолчанию, когда вы создали перо, viewController.view настроен на представление пера, которое отображается для iPhone.

Для iPad вы должны обновить это свойство [viewcontroller view] до назначенного вам представления. В противном случае, как предложил Хоши, это также хороший способ иметь два разных файла перьев, чтобы вы могли загружать необходимое перо в зависимости от условия.

Надеюсь, это поможет :)

person Basheer    schedule 15.12.2011