Какой недостающий шаг / информация в этом уроке iPhone Interface Builder? - PullRequest
0 голосов
/ 15 сентября 2009

Я следую руководству по использованию Interface Builder из главы 2 «Разработка приложений для iPhone SDK» Здзярского. Идея состоит в том, чтобы создать очень простое приложение, которое состоит из контроллера панели вкладок, у которого есть две кнопки, каждая из которых связана с различным объектом представления (и каждый объект представления в своем собственном соответствующем файле .xib). В итоге я получаю пустое окно и некоторый код, который значительно отличается от того, что в книге указано, что я должен иметь.

Я подозреваю, что пропущенный шаг, но указанные шаги разбросаны по главе экспликации, поэтому я не уверен на 100%, что я что-то не пропустил. Вот краткое изложение того, что шаги кажутся:

  1. Создайте новое «оконное приложение» с именем «Пример».
  2. Откройте MainWindow.xib в Интерфейсном Разработчике и сделайте следующее: а) Выберите значок «Окно» в окне документа, откройте инспектор, установите различные посторонние свойства. б) Перетащите «Контроллер панели вкладок» в окно документа. c) Измените названия двух вкладок на «Последние» и «История». г) Сохранить MainWindow.xib
  3. Создайте новый шаблон IB "Cocoa Touch View". Добавьте к нему «табличное представление». Сохраните его как Recents.xib.
  4. Аналогичным образом создайте еще один шаблон IB "Cocoa Touch View". Добавьте к нему «текстовое представление», сохраните как History.xib.
  5. Вернитесь к MainWindow.xib, отредактируйте каждую вкладку в контроллере панели вкладок в Инспекторе так, чтобы «Имя пера» соответствовало соответствующему файлу .xib, созданному на шаге 3 (для последних) и шаге 4 (для История).
  6. Добавьте Recents.xib и History.xib к проекту «Пример».

На данный момент в книге сказано, что если я посмотрю на ExampleAppDelegate.h, я должен увидеть ссылки на объекты Interface Builder в моем коде, такие как:

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet RootViewController *viewController;

Когда я на самом деле смотрю на файл, я вижу только первую (UIWindow) строку выше. Линия RootViewController отсутствует.

Точно так же в книге говорится, что когда я загляну внутрь ExampleAppDelegate.m, я должен увидеть некоторые директивы синтеза:

@synthesize window;
@synthesize viewController;

Но опять же, я вижу только строку, относящуюся к окну.

И, конечно же, если я нажму «Build and Go», то в симуляторе я вижу пустое окно.

Одна из вещей, которые я заметил при прохождении этого процесса, заключалась в том, что я не был проинструктирован перетаскивать контроллер панели вкладок из шага 2b непосредственно в отображаемый объект Window в конструкторе интерфейса. В любом случае я попытался сделать это и обнаружил, что мне не разрешено (и на самом деле, контроллеры любого вида не приветствуются непосредственно в окне). Это показалось мне странным - я заметил, что перетаскивание объекта View в окно выглядит нормально. Но так как представления не могут содержать контроллеры вида, я не могу понять, как вы когда-либо предполагали добавить контроллер вида внутри иерархии, содержащейся в окне.

Какие шаги и / или знания мне не хватает здесь?

Ответы [ 2 ]

1 голос
/ 15 сентября 2009

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

С простым шаблоном приложения на основе Windows вам необходимо добавить выход rootViewController в заголовочный файл AppDelegate и подключить его к экземпляру контроллера представления в IB. Представителю вашего приложения также понадобится код для добавления вашего основного вида в окно:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // Add the tab bar controller's current view as a subview of the window
    [window addSubview:rootViewController.view]; 
}

Вот так ваш главный контроллер вида связан с окном вашего приложения. Без этого кода вы увидите только пустое окно.

0 голосов
/ 15 сентября 2009

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

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