UITabBarController + UINavigationController проблема проекта xcode - PullRequest
0 голосов
/ 27 марта 2011

У меня проблема, я создал приложение на основе окна проекта в xcode, затем я создаю UITabBarController, который управляет двумя представлениями все программно, второе представление - это tableView, и я хочу видеть сверху UINavigationController Я много пробовал, но не знаю, как получить UINavigationController во втором представлении.это код:

ProjectAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //Creo una tabBarController
    UITabBarController *tabBarController = [[UITabBarController alloc] init];

    //Create the two view controllers
    UIViewController *vc1 = [[Visuale1ViewController alloc] init];
    UIViewController *vc2 = [[Visuale2ViewController alloc] init];

    //Make an array containing the two view controllers
    NSArray *viewControllers = [NSArray arrayWithObjects:vc1, vc2, nil];

    //The viewControllers array retains vc1 and vc2, we can release
    //our ownership of them in this method
    [vc1 release];
    [vc2 release];

    //Attach them to the tab bar controller
    [tabBarController setViewControllers:viewControllers];

    //Setto la tabBarController come rootViewController di window
    [window setRootViewController:tabBarController];

    //The window retain tabBarController, possiamo lasciare il nostro riferimento
    [tabBarController release];

    [self.window makeKeyAndVisible];

    return YES;
}

Visuale1ViewController.h

@implementation Visuale1ViewController

- (id)init{

    [super initWithNibName:@"Visuale1ViewController" bundle:nil];
    //Get the tab bar item
    UITabBarItem *tbi = [self tabBarItem];

    //Give it a label
    [tbi setTitle:@"Visuale 1"];

    return self;
}

// The designated initializer.  Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle {
    return [self init];
}

Visuale2ViewController.h

@implementation AnswerViewController

- (id)init{
    //Call the superclass's designated initializer
    /*[super initWithNibName:nil
                                    bundle:nil];*/
    [super initWithStyle:UITableViewStyleGrouped];

    answers = [[NSMutableArray alloc] init];
    for (int i = 0; i<10 ; i++) {
            [answers addObject:[Answer DefaultAnswer]];
    }
    //Get the tab bar item
    UITabBarItem *tbi = [self tabBarItem];

    //Give it a laber
    [tbi setTitle:@"Visuale 2"];

    return self;
}

- (id)initWithStyle:(UITableViewStyle)style{
    return [self init];
}

//All below are all methods to work the table view, and all go well, the only problem it's the UINavigationController, to manage then the detail of the table...

Теперь я хочу знать, как я могу поставить UINavigationController во втором представлении.Я пытаюсь сделать это в ProjectAppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    //Creo una tabBarController
    UITabBarController *tabBarController = [[UITabBarController alloc] init];

    //Create the two view controllers
    UIViewController *vc1 = [[Visuale1ViewController alloc] init];
    UIViewController *vc2 = [[Visuale2ViewController alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc2];

    //Make an array containing the two view controllers
    NSArray *viewControllers = [NSArray arrayWithObjects:vc1, navController, nil];

    //The viewControllers array retains vc1 and vc2, we can release
    //our ownership of them in this method
    [vc1 release];
    [vc2 release];

    //Attach them to the tab bar controller
    [tabBarController setViewControllers:viewControllers];

    //Setto la tabBarController come rootViewController di window
    [window setRootViewController:tabBarController];
}

Таким образом, я могу визуализировать панель навигации, но я потерял имя SecondTabBar.Извините за мой английский, как я могу это сделать?

Ответы [ 5 ]

0 голосов
/ 28 марта 2011

После просмотра сценарий кажется таким же, как у меня. С чем я столкнулся впервые при работе с Tab + Navigation.

Я уверен, что есть какая-то проблема с вашим Tab + Navigation basedприложение.Хотя он показывает, что вкладка, а также навигация не способны перемещаться по основному потоку. И очень трудно решить вашу проблему с таким меньшим количеством кода.

Вместо этого у меня было альтернативное решение для того же:

Если у вас есть панель вкладок в XIB, самый простой способ сделать это - перетащить объект UINavigationController из окна библиотеки (выглядит как кнопка левой навигационной панели на золотом фоне) в дерево.Вид для панели вкладок (только текстовый вид, а не графический интерфейс).Поместите его под панель вкладок, затем перетащите существующий контроллер представления под контроллер панели вкладок, а не под панель вкладок.

Когда вы перейдете к этой вкладке, вы должны увидеть панель навигации в верхней части.... если вы загружаете контроллер навигации из другой xib, вы измените навигационную панель в панели вкладок xib.

, иначе, ниже вы можете выбрать лучший URL для того же:

http://books.google.co.in/books?id=2yYlm_2ktFYC&pg=PA179&lpg=PA179&dq=navigation+with+the+tab+based+application+iphoneSDK&source=bl&ots=nf2YYjX5Am&sig=COpHj9wOtsDChQBglpsljSTsElw&hl=en&ei=3ZoFTeGSOI_tsgbc_Iz6CQ&sa=X&oi=book_result&ct=result&resnum=6&ved=0CDAQ6AEwBQ#v=onepage&q&f=false

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

Надеюсь, это наверняка решит вашу проблему.

0 голосов
/ 28 марта 2011

Вам необходимо установить свойство tabBarItem для вашего UINavigationController.Как то так.

    UITabBarItem *tabItem = [[UITabBarItem alloc] initWithTitle:@"Visuale 2" image:nil tag:1];      
    UIViewController *vc2 = [[Visuale2ViewController alloc] init];

    navController = [[UINavigationController alloc] initWithRootViewController:vc2];
    navController.tabBarItem = tabItem;
0 голосов
/ 27 марта 2011

Для заголовка TabBar-

UITabBar * tabBar = [self.tabBarController tabBar];

NSArray * tabBarItems = [элементы tabBar];

UITabBarItem * secondTabBarItem = [tabBarItems objectAtIndex: 1];

[secondTabBarItem setTitle: @ "Visuale2"];

0 голосов
/ 27 марта 2011

Я оставил код как есть и добавил в init Visale2ViewController это:

UIImage *i = [UIImage imageNamed:@"Hypno.png"];
[tbi setImage:i];

и теперь могу видеть текст Visuale2 в tabBar и изображение ... я не знаю почему...

0 голосов
/ 27 марта 2011

Да, во втором представлении вы должны установить заголовок как

[self.navigationItem setTitle: @ "Visuale2"];

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