Пользовательский UITabBarController - PullRequest
1 голос
/ 22 сентября 2010

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

Мои подходы к этому и препятствия вэто:

A) Первым решением, которое мне пришло в голову, было создание моего собственного viewController, который будет работать как UITabBarController с кнопками внизу, и добавление этого viewController в окно.Однажды, когда пользователь нажимает кнопку внизу, поменяйте местами представление в видимой области с новым viewController'ом, который соответствует кнопке, теперь нажатой пользователем.

Проблема с этой стратегией заключается в том, что, поскольку я меняю вид, соответствующийviewControllers не получит эти сообщения:

  • viewWillAppear
  • viewWillDisappear
  • viewDidAppear
  • viewDidDisappear

И все события вращения

B) Я мог бы использовать подход принятого ответа в этой теме: Пользовательский UITabBarController Проблемы с контроллерами представления и представлениями

Но высота моего tabBar отличается от значения по умолчанию.

Из-за приведенных выше причин я не могу использовать эти подходы.

Сказав это, у меня нетспециальное требование на вкладке «Больше».У меня будет только 5 вкладок, которые будут отображаться на панели вкладок, и, следовательно, изменение порядка элементов панели вкладок выходит за рамки.

Ожидание предложений и идей.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

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

Не должно быть проблем с отправкой -viewWill / Did (Dis) Появляются нужному контроллеру в соответствующий момент. Это то, что делает UITabBarController тоже.

Что касается событий вращения:

  • В shouldAutorotateToInterfaceOrientation: перешлите это сообщение своим дочерним контроллерам и установите возвращаемое значение в зависимости от их возвращаемых значений (UITabBarController возвращает YES только если все его дочерние контроллеры возвращают YES для запрошенной ориентации ).

  • Переадресация willRotateToInterfaceOrientation:duration:, didRotateFromInterfaceOrientation: и willAnimateRotationToInterfaceOrientation:duration: дочерним контроллерам (по крайней мере, на текущий видимый) при их получении.

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

Опять же, я не уверен, сработает ли это.

0 голосов
/ 10 октября 2011

Вы можете реализовать следующий код для создания настраиваемой панели вкладок в этом использовании для изображений с помощью CGRect make. Дополнительный код используется для создания настраиваемой панели вкладок

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

    // Add the tab bar controller's current view as a subview of the window
    tabBarController.delegate = self;
    tabBarController = [[UITabBarController alloc] init];

    mainDashBoard = [[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil];
    mainSearchView = [[SearchView alloc] initWithNibName:@"SearchView" bundle:nil];
    mainMoreView = [[MoreView alloc] initWithNibName:@"MoreView" bundle:nil];

    UINavigationController *nvCtr0 = [[[UINavigationController alloc] init] autorelease];
    UINavigationController *nvCtr1 = [[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease];
    UINavigationController *nvCtr2 = [[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease];
    UINavigationController *nvCtr3 = [[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease];
    UINavigationController *nvCtr4 = [[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease];

    tabBarController.viewControllers = [NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil];

    nvCtr0.tabBarItem.enabled = NO;
    nvCtr4.tabBarItem.enabled = NO;

    [window tabBarController.view];
}
...