Приложение XCode TabBar - несколько представлений?

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

Я пытался найти пример этого, но xcode 4.2 (будь то на ios5.0 или ранее) не создает mainwindow.xib, поэтому мне пришлось найти способ создать это программно следующим образом:

#import "AppDelegate.h"

#import "HomeViewController.h"
#import "ViewListViewController.h"
#import "ShareViewController.h"
#import "FriendsViewController.h"
#import "SettingsViewController.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize tabBarController = _tabBarController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    UIViewController *homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    UIViewController *viewListViewController = [[ViewListViewController alloc] initWithNibName:@"ViewListViewController" bundle:nil];
    UIViewController *shareViewController = [[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
    UIViewController *friendsViewController = [[FriendsViewController alloc] initWithNibName:@"FriendsViewController" bundle:nil];
    UIViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
    self.tabBarController = [[UITabBarController alloc] init];
    [self.tabBarController setDelegate:self];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeViewController, viewListViewController, shareViewController, friendsViewController, settingsViewController, nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

Этот код в моем AppDelegate.m отлично работает, и я могу отлично переключаться между вкладками. Проблема, с которой я сталкиваюсь, заключается в том, что я буду добавлять графику на страницы и использовать их в качестве кнопок для переключения между представлениями для добавления/редактирования/удаления данных из базы данных (отдельная проблема, которую мне придется научиться делать дальше).

Большинство примеров, которые я нашел, запускают приложение либо с tabBar, либо с uiNavigation с UIViews для переключения между ними. Мне еще предстоит найти пример, который ясно покажет, как делать то, что я хочу сделать. Является ли мой подход неправильным для создания приложения tabBar в качестве базового шаблона для этого, или это можно сделать? Каждая вкладка может иметь несколько представлений, выполняющих функции, но мне нужно иметь возможность создавать их и переключаться между ними в среде tabBar.

заранее спасибо,

Серебряный тигр

-ОБНОВЛЕНИЕ:-

ПОСЛЕ чтения немного я теперь думаю, что aUINavigationController не то, что я ищу. Что мне нужно, так это способ создания пользовательской кнопки, позволяющей переключать представления, поскольку кнопки, которые я буду использовать в своем контенте, будут либо графическими, либо прозрачными поверх графического фона. Можно ли использовать настраиваемые кнопки для нажатия новых представлений, сохраняя при этом панель вкладок постоянно видимой? Моя структура будет такой, как показано ниже

Home
  Add
  Edit
  delete

ViewList - Single page to view list

Share - Single page to send emails / invites

Friends
  Add
  Edit
  Delete

Settings - Single page for app settings/preferences

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


person Silvertiger    schedule 19.10.2011    source источник


Ответы (1)


И UINavigationController, и UITabBarController являются контроллерами контроллеров представления. В этой функции они работают одинаково. Но есть некоторые отличия. Используйте это как руководство:

UINavigationController: здесь у вас обычно есть панель навигации вверху. Вы «вталкиваете» другие контроллеры представления в «стек», а контроллер навигации заботится обо всех кнопках сверху, чтобы перемещаться вперед и назад, а также об анимации и т. д. Часто, но не всегда, это реализуется с табличными представлениями.

UITabBarController: здесь у вас всегда есть панель вкладок внизу, поэтому это имеет смысл только в том случае, если есть вещи, к которым пользователь обычно имеет доступ, независимо от того, где он находится в иерархии представлений. Посмотрите на приложение «Будильник» для типичного примера.

Комбинация: если вы хотите объединить их, вы начинаете с контроллера панели вкладок. Затем вы можете назначить отдельные контроллеры навигации одному или нескольким элементам панели вкладок. Контроллеры навигации, в свою очередь, управляют своими контроллерами представления. Убедитесь, что ваш пользовательский интерфейс не слишком загроможден элементами управления навигацией вверху и внизу экрана. Посмотрите на приложение iTunes для типичного примера.

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

person Mundi    schedule 19.10.2011
comment
Спасибо за подробное описание. Прочитав его, я обнаружил, что использование UINavigationController может быть не тем, что мне нужно. Что мне действительно нужно, так это пользовательская кнопка, которая позволит мне переключать представления. Я обновлю свое первоначальное описание, чтобы лучше понять, что я ищу. - person Silvertiger; 20.10.2011