Добавление UITabBarController программным способом с помощью UINavigationBarController в качестве первой вкладки в существующий контроллер навигации - PullRequest
2 голосов
/ 04 мая 2011

У меня в настоящее время есть UINavigationController в моем делегате приложения, где я нажимаю ViewController для входа в систему.Если вход в систему успешен, я хочу создать UITabBarController с контроллером навигации в качестве первой вкладки, корневым контроллером которой является UIViewController, который я создаю.

RootViewController моего первого UINavigationController фактически действует как делегат для logincontroller, поэтому, если пользователь входит в систему правильно, он вызывает метод в моем RootViewController, где я бы хотел поместить UITabBarController в стек.Вот мой код:

UITabBarController *tbController = [[UITabBarController alloc] init];
    FileBrowserViewController *fileController = [[FileBrowserViewController alloc]   init];
    fileController.pathToFileDB = pathToDBUnzipped;
    fileController.parentId = @"0";

    UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:fileController];

    NSMutableArray *aViewControllersArray = [[NSMutableArray alloc] initWithCapacity:2];
    [aViewControllersArray addObject:navController];
    [navController release];

    [tbController setViewControllers:aViewControllersArray];

    [self.navigationController pushViewController:tbController animated:YES];

    [tbController release];

Теперь все работает нормально.Кроме 2х вещей.Вот снимок экрана: My iPHone

1) Я не вижу никаких элементов uitabbar.Как мне установить изображение и текст для каждой вкладки?2) Я не хочу эту верхнюю черную полосу.Я только хочу 1 бар на вершине с кнопкой отмены.Как убрать дополнительную планку?

Ответы [ 4 ]

6 голосов
/ 04 мая 2011

Я всегда придерживаюсь этого подхода, когда у меня есть UINavigationController и UITabbarController:
Вам нужно начать с приложения, основанного на представлении.А затем создайте UITabbarController в своем файле appDelegate.

Appdelegate.h

UITabBarController *tabBarController;
// set properties

Appdelegate.m

// Synthesize

tabBarController = [[UITabBarController alloc] init];
tabBarController.delegate=self;

// Adding Search,Nearby,Map,AboutUs,Favorites Tabs to tabBarController  
Search * search = [[Search alloc] init];  
UINavigationController *searchNav = [[UINavigationController alloc]        initWithRootViewController:search];  

Nearby* nearby = [[Nearby alloc] init];  
UINavigationController *nearbyNav = [[UINavigationController alloc] initWithRootViewController:nearby];  

Map* map = [[Map alloc] init];  
UINavigationController *mapNav = [[UINavigationController alloc] initWithRootViewController:map];  

AboutUs* aboutUs = [[AboutUs alloc] init];  
UINavigationController *aboutUsNav = [[UINavigationController alloc] initWithRootViewController:aboutUs];  

Favorites* favorites = [[Favorites alloc] init];  
UINavigationController *favoritesNav = [[UINavigationController alloc] initWithRootViewController:favorites];  

NSArray* controllers = [NSArray arrayWithObjects:searchNav,nearbyNav,mapNav,aboutUsNav,favoritesNav, nil];  
tabBarController.viewControllers = controllers; 

[window addSubview:tabBarController.view];    

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

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

- (id)init {}

, в котором вы можете установить имя и изображение вкладки.

Я всегда придерживаюсь этого подхода, и он никогда не подведет.Вкладки всегда видны.Вы можете вносить изменения в соответствии с вашим кодом.

2 голосов
/ 04 мая 2011

чтобы скрыть вышеуказанную черную полосу, используйте -

[self.navigationController setNavigationBarHidden:TRUE];

для установки элемента панели вкладок -

для системного элемента -

UITabBarItem *firstItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0];

для нестандартного изделия -

UITabBarItem *firstItem = [[UITabBarItem alloc] initWithTitle:@"title" image:[UIImage imageNamed:@""] tag:0];

[navController setTabBarItem:firstItem];
0 голосов
/ 04 мая 2011

Привет, друг, верхняя строка - строка состояния.Вы можете установить .statusbar hidden = yes;или измените его с plist, когда вы открываете plist, есть возможность скрыть его,

0 голосов
/ 04 мая 2011

Вот хорошее видео о том, как объединить панель вкладок, панель навигации и / или представления таблицы.

http://www.youtube.com/watch?v=LBnPfAtswgw

Если вы не хотите, чтобы на экране регистрации был контроллер панели вкладок, вам придется представить его как модальное представление (поскольку панель вкладок является вашим корневым контроллером представления). Это может быть сделано с помощью presentModalViewController: animated: метод. Вы можете найти информацию об этом на:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html%23//apple_ref/doc/uid/TP40007457-CH111-SW1

Надеюсь, это поможет. Дайте мне знать, если у вас есть другие вопросы!

Приветствия, Эван.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...