UITabBarController не показывает имя tabbarItems

Я создаю приложение на основе UTabbarController. Я создаю эту панель вкладок программно. Все работает нормально, за исключением того, что я не вижу заголовок tabBatItem. Я все инициализировал правильно, но когда приложение запускается, все, что я вижу, это заголовок первой вкладки. но если я выберу 2-й таббарит или так далее, я увижу их имена. Я не знаю, что здесь происходит. Вот мой код. Пожалуйста, дайте мне знать, если я сделал какую-либо ошибку.

Спасибо.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    HomeViewController *viewController1 = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
UINavigationController*navController1=[[UINavigationController alloc]initWithRootViewController:viewController1];
navController1.title=@"Home";
[viewController1 release];

TrainerTableViewController *viewController2 = [[TrainerTableViewController alloc] initWithNibName:@"TrainerTableViewController" bundle:nil];
UINavigationController*navController2=[[UINavigationController alloc]initWithRootViewController:viewController2];
navController1.title=@"Trainer";
[viewController2 release];

SettingsTableViewController *viewController8 = [[[SettingsTableViewController alloc] initWithNibName:@"SettingsTableViewController" bundle:nil] autorelease];
UINavigationController*navController8=[[[UINavigationController alloc]initWithRootViewController:viewController8]autorelease];
navController1.title=@"Settings";

AboutUsViewController *viewController9 = [[[AboutUsViewController alloc] initWithNibName:@"AboutUsViewController" bundle:nil] autorelease];
UINavigationController*navController9=[[[UINavigationController alloc]initWithRootViewController:viewController9]autorelease];
navController1.title=@"About Us";


self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:navController1, navController2,navController8, navController9, nil];

[navController1 release];
[navController2 release];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}

person slonkar    schedule 25.10.2011    source источник


Ответы (4)


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

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization.
        self.title = @"Apply Now";
        self.tabBarItem.image = [UIImage imageNamed:@"tbApplyNow.png"];
    }
    return self;
}
person Louie    schedule 25.10.2011
comment
Спасибо @Луи !! Вы спасли мой день .. +1 за ответ. Но у меня есть один вопрос: почему он работает только с initWithNibName, а не с viewDidLoad? - person Niru Mukund Shah; 09.10.2013

Лучший способ решить эту проблему - установить заголовок viewController, а не navigationController.

viewController1.tabBarItem.title = @"CohesiveSelf";

Сделайте это для всех вкладок.

person aks.knit1108    schedule 20.01.2012

Вы устанавливаете заголовок только для navController1. Для каждого создаваемого вами контроллера nab вам нужно установить заголовок для него.

Попробуй это:

ИЗМЕНЕНИЕ: navController1.title=@"Тренер"; TO navController2.title=@"Тренер";

ИЗМЕНЕНИЕ: navController1.title=@"Настройки"; TO navController8.title=@"Настройки";

ИЗМЕНЕНИЕ: navController1.title=@"О нас"; TO navController9.title=@"О нас";

Также вы не выпускаете navController8 или 9, что приведет к утечке памяти.

person Flippinjoe    schedule 25.10.2011

На самом деле вы устанавливаете заголовок для NavigationControllers. Кроме того, следите за тем, чтобы ваш код задавал заголовок navController1 несколько раз, а не задавал его для остальных.

Вы можете установить заголовки для своей панели вкладок, настроив tabBarItems для каждого контроллера.

У вас есть возможность создать подкласс или просто включить это в метод application:didFinishLaunchingWithOptions: в вашем AppDelegate.

Вот пример:

UITabBarItem *tbi1 = [navController1 tabBarItem];
[tbi1 setTitle:@"Home"];

UIImage *i1 = [UIImage imageNamed:@"hometabicon.png"];
[tbi1 setImage:i1];

Это установит заголовок tab1 на «Home», а значок tabBar установит на файл с именем «hometabicon.png».

Вы можете повторить тот же шаблон для каждой из других вкладок.

person superjessi    schedule 26.10.2011