2010-09-22 5 views
1

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

Мои подходы для этого и препятствия в нем:

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

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

  • viewWillAppear
  • viewWillDisappear
  • viewDidAppear
  • viewDidDisappear

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

B) Я мог бы использовать подход принято отвечать в этой теме: Custom UITabBarController Problems with View Controllers and Views

Но высота моего TabBar не является таким же, как по умолчанию.

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

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

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

ответ

2

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

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

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

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

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

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

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

+0

Хм, спасибо за ваше предложение , Хорошо, я мог бы настроить, как вы сказали. Кроме того, я могу пересылать все сообщения так же, как вы указали. Но проблема заключается в следующем: 1. -viewWillAppear и disAppear будут не чем иным, как последовательным набором вызовов! 2. Контроллер просмотра автоматически получает обратный вызов начальной ориентации при загрузке представления, а именно. -didRotateFromInterfaceOrientation, но в этом случае нам придется имитировать его. 3. Меня беспокоят любые проблемы или препятствия, которые могут возникнуть в будущем, поскольку это база для моего приложения. Интересно, стоит ли этого риска? –

+0

Все контроллеры представлений в этом предложении означают: «UITabBarController возвращает только YES, если все его дочерние контроллеры возвращают YES для запрошенной ориентации», скажем, если есть 4 вкладки, то если все контроллеры представления, соответствующие 4 вкладкам, отвечают только текущей ориентации, тогда он должен возвращать YES -OR- только для контроллера вида, который отображается с помощью TabBarcontroller, должен быть запрошен? –

0

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

-(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]; 
} 
Смежные вопросы