UITabBar и более 1 UINavigationController - PullRequest
0 голосов
/ 21 июля 2009

В настоящее время я работаю над приложением, которое требует, чтобы у меня были разные UINavigationControllers - поэтому я использую панель вкладок и пытаюсь использовать UITabBar для переключения между ними, так что я имею в делегате приложения немного кода примерно так:

// Setting up the views for the tab controller
Friends *friends = [[[Friends alloc] initWithNibName:@"Friends" bundle:[NSBundle mainBundle]] autorelease];
WifiManager *wifi = [[[WifiManager alloc] initWithNibName:@"WifiManager" bundle:[NSBundle mainBundle]] autorelease];

UINavigationController *locationController = [[UINavigationController alloc] initWithRootViewController:wifi];      
UINavigationController *friendsController = [[UINavigationController alloc] initWithRootViewController:friends];

//Set up the tab controller
tabBarController = [[UITabBarController alloc] init];

tabBarController.viewControllers =
[NSArray arrayWithObjects:locationController, friendsController, nil];

//Add the tab bar to the window
[window addSubview:tabBarController.view];

Это скомпилирует и загрузит первый UINavigationController, но когда я нажимаю на другой контроллер навигации, я получаю:

*** -[NSCFData tabBarItem]: unrecognized selector sent to instance 0x1152b0'

Самое странное, что я могу использовать контроллер вкладок с одним UINavigationController, и все работает как надо, но когда я пытаюсь добавить второй, он с треском проваливается - у кого-нибудь есть идеи относительно того, что я делаю неправильно? здесь

Заранее спасибо

Джеймс

Ответы [ 3 ]

3 голосов
/ 22 июля 2009

Проверено ли, что каждый из контроллеров отдельного представления (Friends и WifiManager) работает, когда есть только один? Возможно, ваша проблема не в «двух контроллерах», а в «одном неисправном контроллере».

0 голосов
/ 21 июля 2009

Этот код должен работать.

Единственное, что я могу предложить, - это не выпускать автоматически созданные вами контроллеры представления.

0 голосов
/ 21 июля 2009

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

Использование Interface Builder: это было довольно просто сделать с IB. В моем файле MainWindow.xib на верхнем уровне есть все обычные вещи: Window, универсальный UITabBarController и UIViewController, которые я хочу вставить в каждый UINavigationController, мы скажем, что UIViewController 1b и 2b (1a и 2a - это два UIViewController, которые являются представлениями по умолчанию для каждой соответствующей панели навигации). Вложенный в UITabBarController, у меня есть UITabBar и два моих UINavigationController. В каждом из них у меня есть UINavigationBar, UIViewController и UITabBarItem, в этом порядке. Вот как выглядит мой код в делегате приложения:

[window addSubview:tabBarController.view];
[tabBarController setSelectedIndex:0];

Затем, когда я хочу использовать навигационные панели, я делаю это:

UIViewController* newView = [[UIViewController alloc]initWithNibName:@"newViewController" bundle:nil];
[self.navigationController pushViewController:newView animated:TRUE];
[newView release];

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

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

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