Любой учебник на основе "не TabBar-шаблон" о том, как добавить UITabBar? - PullRequest
0 голосов
/ 14 сентября 2011

Я хотел бы добавить TabBar к существующему приложению на основе представлений, которое я уже начал, чтобы позволить пользователю переключаться на другие части приложения, такие как раздел «О программе» и другой раздел, озаглавленный «Сохраненные поиски», для отображениянавигационный контент (сохраненный список поиска> конкретный результат поиска> сведения о продукте).

Есть идеи, как это сделать?Все учебники, которые я нашел, указывают мне прямо на шаблон TabBar.

Спасибо за помощь,

Стефан

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Вы можете начать с шаблона приложения UITabBar, и вы поймете, что это очень легко сделать:

В вашем UIApplicationDelegate классе, в методе

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

Создайте UITabBarController вот так:

UITabBarController *tabBar = [[UITabBarController alloc] init];

Затем вы устанавливаете контроллеры представления, которые будут отображаться на панели вкладок:

tabBar.viewControllers = viewControllers;

То есть NSArray, который вы можете предварительно создать с помощью подклассов UIViewController:

NSArray *viewControllers = [[[NSArray alloc] initWithObjects:vc1, vc2, vc3, nil] autorelease];

После этого вам нужно всего лишь установить его в качестве корневого контроллера представления окна или добавить его в качестве подпредставления (это имеет тот же эффект, но первый подход не работает до iOS 4)

self.window.rootViewController = tabBar;

или

[self.window addSubView:tabBar.view];

А потом

[tabBar release];

Чтобы достичь того вида навигации, который вы задаете в своем вопросе, контроллеры представления, которые вы установили для tabBar, должны быть экземплярами UINavigationController, которые очень легко создать, например:

UINavigationController *vc1 = [[UINavigationController alloc] initWithRootViewController:firstViewControllerPage];

И внутри них вы можете нажать (перейти к) другим контроллерам вида, выполнив:

[self.navigationController pushNavigationController:anotherViewController animated:YES];

Надеюсь, этот краткий обзор прояснит это немного:)

1 голос
/ 14 сентября 2011

Вы можете создать новый UITabBarController и добавить его представление в качестве подпредставления окна ваших приложений. Затем добавьте другие контроллеры представления (для разделов «О программе» и «Сохраненные поиски») в этот контроллер панели вкладок.

Это проще всего сделать в Интерфейсном Разработчике. В вашем MainWindow.xib перетащите объект контроллера панели вкладок на холст. Это автоматически создаст панель вкладок с двумя элементами (по одному для каждого из добавленных контроллеров представления). Для каждого контроллера представления под контроллером панели вкладок перейдите в инспектор идентификации и измените его класс на свой подкласс контроллера представления. Затем покажите инспектор атрибутов, и появится поле «Имя NIB» - снова установите для него соответствующее имя пера. Ваши пользовательские представления контроллера будут загружены из соответствующих им файлов пера. Осталось только назвать каждую вкладку в Интерфейсном Разработчике и дать ей графическое изображение.

Вы также можете сделать это программно, если вам не нравится IB, назначив пользовательские контроллеры представления свойству viewControllers контроллера вкладок и назначив selectedViewController.

Надеюсь, это поможет.

EDIT

Думал, что было бы полезно показать небольшую иерархию! Ваша MainWindox.xib структура может выглядеть примерно так:

  • AppDelegate
  • UIWindow
  • UITabBarController
  • UITabBar
  • AboutViewController (представление загружено из «AboutViewController.xib»)
  • Пункт панели вкладок - О
UINavigationController
  • Панель навигации
  • SavedSearchesViewController - Root View Controller (представление загружено из "SavedSearchesViewController.xib"
  • Элемент Tab Tab

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

...