2012-03-23 5 views
0

С приведенным ниже кодом (для более низких версий iOS) я подклассифицирую UINavigationBar и применяя к каждой панели навигации (каждого навигационного контроллера) в своем UITabBarController.Пользовательская панель навигации для контроллера «More» View в UITabBarController

@implementation CustomNavigationBar 

- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed:@"customNavigationBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 

код отлично работает для контроллеров зрения, которые явно доступны, но при нажатии на вкладку «Дополнительно», чтобы получить доступ к другим контроллерам просмотра, пользовательские изображения не появляются больше. Я что-то пропустил?

+0

ли появляются больше точек. , , ?? Пожалуйста, покажите, как вы инициализируете свой UITabBarController .... – Damo

+0

Да, они появляются, 'UITabController' инициализируется в Interface Builder и обрабатывается в моем основном контроллере представления. Больше точек появляются, и у меня нет проблем с самим контроллером, просто с настройкой. Все контроллеры представлений настраиваются отдельно от тех, которые содержатся на вкладке «Еще ...». – sooper

+0

Сколько контроллеров просмотра находится в UITabBarController? Я предполагаю, что более 5? – Damo

ответ

1

Способ, которым я настраиваю контроллер большего размера, заключается в том, чтобы вы не получили больше контроллера по умолчанию от самого UITabBarController - это то, что звучит так, как вы переживаете.

1 Создайте свой собственный контроллер большего размера. Она будет иметь свой собственный пользовательский значок

//MyMoreViewController.m 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     self.title = NSLocalizedString(@"More", @"More"); 
     self.tabBarItem.image = [UIImage imageNamed:@"MyCustomMoreImage"]; 
    } 
    return self; 
} 

, а затем

2 При инициализации вашего UITabBarController, убедитесь, что вы отправить пять точно вид контроллеров инициализатора И что пользовательский контроллер более представлением является корнем контроллер 5-го элемента - то есть вы обычно будете использовать контроллер навигации, а ваш контроллер большего размера будет установлен в его rootViewController.

+0

Единственная проблема, с которой я сталкиваюсь, заключается в том, что я теряю возможность переупорядочивать вкладки в режиме «Редактировать». Возможно, мне придется оттенок оттенка – sooper

+0

Его хороший момент - я пожертвовал переупорядочением в пользу того, что у него НЕ был внешний вид uitableview по умолчанию и он был доволен этим. Если вы хотите/нуждаетесь в повторном заказе, то вы либо c не делайте этого так или не придется изобретать его для себя. – Damo

1

UITabBarController создаст UINavigationController для более пункта, поэтому его UINavigationBar не будет экземпляром вашего класса, но UINavigationBar вместо этого.

Вы можете посмотреть API-интерфейс iOS 5, чтобы изменить внешний вид и внешний вид.

+0

Я серьезно подумываю о том, чтобы сделать мое приложение доступным только к iOS 5. Есть ли где-нибудь, что я могу узнать о статистике версий iOS? Каково ваше мнение об этом? – sooper

+1

Для нового приложения без установленной базы я бы определенно сделал это. В существующем приложении вы можете получить случайные жалоба от кого-то, кто уже заплатил и «оставил» обновление. – pgb

1

Вы можете использовать свойство moreViewController вашего tabBarController, чтобы получить больше Навигационный контроллер (я использовал это на iOS7 приложение)

UINavigationController *moreViewController = tabController.moreNavigationController; 
    if(moreViewController) 
    { 
     [moreViewController.navigationBar setBarTintColor: [UIColor yellowColor]]; 
     [moreViewController.navigationBar setTintColor: [UIColor whiteColor]]; 
    }