UIApplicationDelegate в Интерфейсном Разработчике с Xcode 4.2 - PullRequest
4 голосов
/ 09 января 2012

Мое приложение представляет собой приложение на основе представления. Мне нужно создать UINavigationController как мой rootViewController.

В предыдущей версии Xcode был файл XIB с именем mainWindow, в котором мы могли бы:

  • Подключите нашу UIApplicationDelegate реализацию к UIApplication s delegate розетке
  • Подключите UIWindow к UIApplicationDelegate
  • Подключите UIViewController к свойству UIWindow rootViewController.

Но теперь (Xcode 4.2) не создает этот файл xib!

Итак, как мне создать пользовательский UINavigationController и подключить его к моей UIApplicationDelegate реализации в InterfaceBuilder?

Вот мой код в моей UIApplicationDelegate реализации:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    SDWebImageRootViewController *root = [[SDWebImageRootViewController alloc] initWithNibName:nil bundle:nil];

    _navigationController = [[[UINavigationController alloc] initWithRootViewController:root] autorelease];

     self.window.rootViewController = _navigationController;

    [[_navigationController navigationBar] setBarStyle:UIBarStyleBlack];
    [[_navigationController navigationBar] setTranslucent:YES];

    [_window addSubview:[_navigationController view]];
}

1 Ответ

8 голосов
/ 09 января 2012

Прежде всего, да, вы все еще можете использовать IB для этого даже в последней версии XCode, поэтому я не уверен, откуда вы это взяли.

Если вы хотите знать, как указать делегата приложения без IB, это довольно просто:

В вашем методе main просто используйте имя класса делегата приложения в качестве 4-го параметра для UIApplicationMain:

int main(int argc, char *argv[])
{
    @autoreleasepool
    {
        int retVal =  UIApplicationMain(argc, argv, nil, @"APPLICATION_DELEGATE_CLASS_NAME");
        return retVal;
    }
}

Фактически, Xcode 4.2 делает это за вас по умолчанию, когда вы создаете приложение на основе представления из шаблона (хотя оно не использует статическую строку ... что, вероятно,если честно, лучше, чем мое предложение, потому что оно будет подвергнуто рефакторингу, если вы используете встроенный рефакторинг и т. д.):

NSStringFromClass([AppDelegate class])

Чтобы ответить на ваш дополнительный вопрос: ok , then what should I do ? to connect the UINC outlet in interface ?

Не беспокойся.

Все еще не веришь мне?Хорошо ... вот учебник ... это пятнадцать шагов!... и абсолютно бессмысленно.

Сначала создайте приложение:

enter image description here

Откройте main.m и замените четвертый параметр на nil:

enter image description here

Создайте новый xib или взломайте существующий (который я собираюсь здесь сделать) и сделайте класс владельца файла UIApplication.

enter image description here

Затем добавьте Object из панели инструментов и измените класс на ваш UIApplicationDelegate подкласс:

enter image description here

Теперь переключитесь обратнок владельцу файла и подключите выход delegate к добавленному UIApplicationDelegate.Удалите ссылку view, если вы делаете то, что я сделал, и похитили существующий xib.

enter image description here

Теперь добавьте UIWindow из набора инструментов.

enter image description here

Теперь добавьте 'UIViewController from the toolbox. This is your custom UIViewController . If you want a UINavigationController or UITableViewController`, просто добавьте это вместо этого.

enter image description here

При использованиипользовательский класс UIViewController, укажите класс здесь:

enter image description here

Подключите UIWindow rootViewController розетку к UIViewController:

enter image description here

Взломайте ваш интерфейс UIApplicationDelegate и создайте или измените свойство window, чтобы сделать его IBOutlet.

enter image description here

Переключиться вреализация и удалить любой «бесполезный» код, который настраивает ваш контроллер окна и корневого представления.(Я саркастичен здесь ... этот сжатый код делает все, что мы делаем здесь ... просто программно, а не через IB.)

enter image description here

Переключитесь обратно на свою xibи подключите вашу UIApplicationDelegate window розетку.

enter image description here

Теперь, в информации о развертывании вашей цели, установите xib как "Основной интерфейс":

enter image description here

Готово .... фу!

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