iPhone UITableView, UINavigationView и построитель интерфейса - PullRequest
0 голосов
/ 13 декабря 2010

Я создаю приложение, в котором в конечном итоге будет много вкладок, таблиц, карт и т. Д., Но я хочу создать что-то очень простое, что может стать большой головной болью.

Я используюXCode 3.2.5 и Interface Builder для создания простого приложения, которое будет отображать панель навигации и табличное представление.

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

То, чего я не могу добиться, это заставить контроллер навигации и табличное представление работать вместе должным образом при сборке из построителя интерфейса.

У меня естьконкретные причины для построения в IB просто кода - некоторые из них являются учебным упражнением, чтобы я мог помочь другим, некоторые потому, что код должен передаваться так, чтобы его можно было легко выполнять.

Итак, я 'У нас есть два набора файлов: mainwindow. [h / m / xib] и категории. [h / m / xib].

Основной код mainwindows.m выглядит следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchoptions {
  quickCats = [[categories alloc] initWithNibName:@"categories" bundle:nil];
  [window addSubView: quickCats.view];
  [self.window makeKeyAndVisible];
  return YES;
}

Я объявил «быстрые кошки» вФайл mainwindow.h как ссылка на класс «категории».

Мои категории. [h / m / xib] - это набор UIViewController с подклассами UITableViewController, я только изменил числоразделов, число ячеек и методы ячеек для правильного возврата данных.

Объявление интерфейса буквально:

@interface categories : UITableViewController {
}

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

У меня проблемы с тем, чтобы заставить работать навигационный контроллер.

Я опускаю UINavigationController на панель объектов и затем перетаскиваю UITableViewControllerвнутри, чтобы на экране IB выглядело, как будто у меня есть навигационный контроллер и таблица одновременно.

Теперь, независимо от того, как я подключу его, я не могу заставить контроллер навигации работатьпредставление таблицы.

Я должен подключить представление владельца файла к TableView, или мое приложение вылетает с неперехваченным исключением, сообщающим, что я не вернул UITableView.

ЧтоЯ пропустил?

Я знаю, читая примеры кода тЕсли вы обычно добавляете контроллер навигации, используя initWithRootViewController, но как мне все это подключить с помощью IB?

1 Ответ

0 голосов
/ 15 декабря 2010

Хорошо, я не могу найти однозначного ответа на этот вопрос, кажется, что хотя IB позволит вам разместить элемент управления UINavigationController, а затем добавить UITableViewController в качестве дочернего элемента, вы можете получить только initWithNibName:bundle: инициировать одно или другое.Я перепробовал все, что мог придумать, но он просто не позволил мне подключить его так, чтобы один инициализировал другой при загрузке NIB.

Решением этого является создание файла проекта UIViewControllerкакие подклассы UITableViewController, а затем вы создаете класс с именем MyTableWithNavigation в качестве подкласса UIViewController, выставляете один метод с именем 'init' и в нем вы программно создаете UINavigationController, передавая initWithRootViewController: и затем возвращаете полученный объектAppDelegate, который вызвал его.

Это дает тот же конечный результат, но представляет собой гибрид IB / XCode, который должен будет сделать сейчас.

В основном код в моем init выглядит так:

- (id)init {
if (self = [super init]) {
    mainTable = [[QuickCategories_iPhone_Table alloc] initWithNibName:@"QuickCategories_iPhone" bundle:nil ];
    mainNav = [[UINavigationController alloc] initWithRootViewController: mainTable ];
    return mainNav;
} else {
    return nil;
}
}

Таким образом, все приятные вызовы, такие как self.navigationItem.title, также работают.

Я все еще хотел бы знать, как я должен делать это по-другомухотя.

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