Запуск приложения с другим XIB - PullRequest
1 голос
/ 06 ноября 2011

Я хочу запустить свое приложение с другой Xib. Как бы я это сделал?

Спасибо

Ответы [ 2 ]

3 голосов
/ 06 ноября 2011

Если вы используете конструктор интерфейса:

В разделе SupportingFiles в -info.plist найдите ключ с именем «Основное имя файла основного пера». Измените это на XIB, который вы хотите загрузить первым

Вы также можете вообще убрать эту запись из списка и в main.m дать ей имя вашего приложения. Delegate:

    int retVal = UIApplicationMain(argc, argv, nil, @"HelloViewAppDelegate");

Затем в вашем appDelegate вы можете вручную загрузить свой первый контроллер представления на основе вашего кода и логики. Лично мне это нравится больше, потому что гораздо понятнее - вот мой делегат и код для его загрузки. Он не имеет всех привязок в IB, которые мне нужно запомнить.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // Override point for customization after application launch.
    CGRect screenBounds = [[UIScreen mainScreen] applicationFrame];
    CGRect windowBounds = screenBounds;
    windowBounds.origin.y = 0.0;

    // init window
    [self setWindow: [[UIWindow alloc] initWithFrame:screenBounds]];

    // init view controller
    _mainViewController = [[MainViewController alloc] init];

    [[self window] addSubview:[_mainViewController view]];

    [self.window makeKeyAndVisible];
    return YES;
}

EDIT:

Ответ на ваш комментарий ниже. Вы вставили этот неверный код:

// init view controller 
ViewController = [[ViewController alloc] init]; 
[[self window] addSubview:[ViewController view]]; 

Это не верно. вам нужно имя переменной экземпляра. Называя его «ViewController», вы пытаетесь вызвать переменные члена класса. Если ваш класс называется ViewController, тогда он должен быть:

// notice the instance myviewController is of type ViewController
ViewController *myViewController = [[ViewController alloc] init]; 
// notice calling view against instance (myViewController)
[[self window] addSubview:[myViewController view]]; 

На данный момент, если он не компилируется, вам нужно отредактировать свой вопрос и вставить свой main.m и appDelegate точно так же, как в вопросе.

0 голосов
/ 06 ноября 2011

Файл MainWindow.xib - это просто оболочка, которая предоставляет UIWindow приложения.Хотя вы можете поместить UIViewController в MainWindow.xib, вы также можете просто иметь неподключенный выход UIViewController в делегате приложения и выбрать, какой кончик загрузить во время выполнения в вашем методе application:didFinishLaunchingWithOptions:, например:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options {
  if (case1)
    self.viewController = [[[MyViewController1 alloc] initWithNibName:nil bundle:nil] autorelease];
  else if (case 2)
    self.viewController = [[[MyViewController2 alloc] initWithNibName:nil bundle:nil] autorelease];
  else
    self.viewController = [[[MyViewController2 alloc] initWithNibName:nil bundle:nil] autorelease];

  [window addSubview:self.viewController.view];
  [window makeKeyAndVisible];

  return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...