2010-10-26 3 views
5

В дополнение к этому вопросу here, я действительно заинтересован в создании своего собственного UITabBar и «переводе моего собственного». Мне очень любопытно, как это делается, особенно в приложении, таком как приложение Twitter.Как я могу создать свой собственный UITabBar?

Как это сделать? Может ли кто-нибудь указать на какие-либо хорошие ресурсы о том, как подклассировать это? Должен ли я делать это программно или в XIB?

Редактировать: Я ищу это с помощью пользовательских значков/выбранных значков и имеющих только значки. Edit2: После прочтения дальнейших ответов это звучит как обычный XXTabBarcontroller - это то, что я действительно хочу здесь сделать. Может кто-нибудь прокомментировать это?

Спасибо,

ответ

6

Я не знаю, есть ли лучшего способ сделать это, но я поделюсь своим опытом:

Я создал свою собственную версию панели вкладок с помощью подклассов UIView, в отличие от UITabBar. Как упоминается связанный вопрос, классы пользовательского интерфейса Apple довольно тонко относятся к их размеру, и я не думаю, что смог бы получить подкласс UITabBar по размеру, как я хотел.

Поскольку у меня не было подкласса UITabBar, я также перевернул свои собственные версии UITabBarController и UITabBarDelegate с интерфейсами, которые по сути совпадают с классами Apple. Я мог использовать UITabBarItem для хранения названия и значка для кнопок на панели вкладок, что полезно, поскольку UIViewControllers имеют свойство tabBarItem. Это позволяет хранить в вашем контроллере только массив UIViewControllers, в отличие от массивов для обоих контроллеров и элементов панели табуляции.

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

Как я уже сказал, это только мой опыт, надеюсь, что это поможет.

+0

Thanks Tim. У вас есть код, который вы могли бы поделиться, чтобы продемонстрировать это? – barfoon

+0

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

+0

Как вы отредактировали обновление '' UIButton'', когда изменились свойства в 'UITabBarItem'? –

6

Я сделал это недавно в приложении. В нем было так мало «кода», что ничего нечего было публиковать. Я сделал это как таковой:

Создал UIImageView (высота около 50 пикселей) и разместил его в нижней части экрана. Я наполнил его изображением, похожим на табуляцию, т. Е. Каким-то серым градиентом. Я, вероятно, подклассифицировал UIImageView, но вам даже не нужно это делать.

Я нарисовал пучок кнопок/значков - 37x37 каждый.

Я разместил кучу UIButtons в «панели вкладок» и сделал их «пользовательскими» видами, с созданными мной кнопками/значками.

Я просто использовал методы touchUpInside, чтобы заставить их делать вещи.

Когда мне нужно было получить фантазию - я бы привязал кнопки к моему коду через и IBOutlet, чтобы я мог «отключить» их, - и я нарисую для них сероватый образ «отключенного состояния».

+0

Не могли бы вы сделать это сегодня? или есть лучший подход? :) –

4

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

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

- (void)makeTabBarHidden:(BOOL)hide 
{ 
    if ([tabBarController_.view.subviews count] < 2) 
     return; 
    UIView *contentView; 
    if ([[tabBarController_.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]]) 
     contentView = [tabBarController_.view.subviews objectAtIndex:1]; 
    else 
     contentView = [tabBarController_.view.subviews objectAtIndex:0]; 
    if (hide) 
    { 
     contentView.frame = tabBarController_.view.bounds;  
    } 
    else 
    { 
     contentView.frame = CGRectMake(tabBarController_.view.bounds.origin.x, 
             tabBarController_.view.bounds.origin.y, 
             tabBarController_.view.bounds.size.width, 
             tabBarController_.view.bounds.size.height - tabBarController_.tabBar.frame.size.height); 
    } 
    tabBarController_.tabBar.hidden = hide; 
} 

Затем сделайте свою собственную навигацию с помощью UIButtons, чтобы переключаться между контроллерами вашего вида.

[tabBarController_ setSelectedIndex:0];

Смежные вопросы