in my application, I have a UITabBarController with a UINavigationControllers initialized as follows
UINavigationController *newsNavigationController = [[UINavigationController alloc] initWithRootViewController: newsViewControler];
newsViewController is a UIViewController. When I click a button on a tab to display a navigation item using newsViewController, the title in the navigation bar is set in order. in newsViewController, I have a method that I call after init. In the installation method, I set the title like this [[self navigationItem] setTitle:[category_c title]];
The problem is now, in my newsViewController I have a tableView, when I touch the cell, I want to click on the UIViewController with the selected news and in the navigation bar to show the name.
In the UIViewController, I have the same installation method in which I configure the header as described above. The problem is that it is not shown. The navigation item is not null because I can call self.navigationItem.hidesBackButton = YES; , and it hides the stand every time, but the title is not displayed.
I create and push the UIViewController news, like this, when the touch of the camera touched
if(newsViewController == nil){ newsViewController = [[NewsViewController alloc] init]; [newsViewController setup]; } [self.navigationController pushViewController: newsViewController animated:YES];
The setup method in newsViewController is as follows:
- (void) setup { self.navigationItem.hidesBackButton = YES; [self.navigationItem setTitle:@"my view"]; }
in newsViewController I have viewDidLoad and tried to set the title there, but without success.
- (void) viewDidLoad {self.navigationItem.title = @ "Test"; [super viewDidLoad]; }
if after [self.navigationController pushViewController: newsViewController animated:YES]; I write [[self.navigationController.viewControllers objectAtIndex:0] setTitle:@"myTitle"]; The UIViewController containing the UITableView gets the myTitle header instead of the newsViewController that I clicked when I touched the cell.
any pointers? I do not understand why the header is set incorrectly.
EDIT2: after reading a bit more and going through my code with the debugger step by step and comparing the rootviewcontrollers with childViewControllers, I noticed that the navigationItem element is created in the viewDidLoad method of childViewController after setting self.title = @ "title", so this is not a zero situation. In the debugger, when I expand the _navigationItem variable, the _navigationBar field is zero after exiting viewDidLoad, in the rootViewControllers navigationBar NOT NULL, and there is a title. I read that if navigationBar is null, the title will not be displayed. In the image, this is what I saw in the debugger. alt text http://img138.imageshack.us/img138/1513/picture2bq.png now I'm looking in this direction.
EDIT1: Below is the code for parental control, firstChildViewController and second ChildViewController. parental control is considered (title is in order). I press a button on the navigation bar that calls bearbeitenAction -> the first child is pressed (the title does not appear). In the firstChildViewController navigation bar, I have a button that, when clicked, pushes the new ViewController on the stack (secondChildViewController). The title of the second ChildViewController does not fit. When I click Back, the firstChildViewController header displays OK.
parentViewController:
//MARK: - //MARK: Initialization methods - (void) setup { dataManipulator = [[DataManipulation alloc] init]; dataManipulator.delegate = self; [self.tabBarItem initWithTitle:[NSString stringWithFormat:@"%@",[category_c title]] image:[UIImage newImageFromResource:[category_c icon]] tag:0]; searchResults = nil; companyDetailsPushed = NO; } //MARK: - //MARK: ViewControllerMethods // Implement loadView to create a view hierarchy programmatically, without using a nib. - (void) loadView { NSLog(@"WatchlistViewController: loadView"); UIView *mainView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] applicationFrame].size.width, [[UIScreen mainScreen] applicationFrame].size.height)] autorelease]; [mainView setBackgroundColor:[UIColor whiteColor]]; mainView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; mainView.contentMode = UIViewContentModeScaleToFill; [mainView setAutoresizesSubviews:YES]; companiesTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, [[UIScreen mainScreen] applicationFrame].size.width, 322)]; companiesTable.delegate = self; companiesTable.dataSource = self; [mainView addSubview:companiesTable]; [companiesTable release]; self.view = mainView; } - (void)viewDidLoad { [super viewDidLoad]; if(![[category_c subtitle] isEqualToString:@""]) { self.title = [category_c subtitle]; } else { self.title = [category_c title]; } } - (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if(companyDetailsViewController == nil) { companyDetailsViewController = [[CompanyDetailsScrollViewController alloc] init]; [companyDetailsViewController setup]; } [watchlistDoneBtn setHidden:TRUE]; companyDetailsPushed = YES; if(viewMode == SearchViewMode) [companyDetailsViewController setCompany:[searchResults objectAtIndex:indexPath.row]]; else if(viewMode == WatchlistViewMode) [companyDetailsViewController setCompany:[[[Financial_deAppDelegate sharedAppDelegate] watchlistCompanies] objectAtIndex:indexPath.row]]; [[self navigationController] pushViewController:companyDetailsViewController animated:YES]; } - (void) bearbeitenAction:(UIButton *) sender { NSLog(@"Berbeiten btn was pressed"); if(berbeitenViewController == nil){ berbeitenViewController = [[BerbeitenViewController alloc] init]; [berbeitenViewController setup]; } [self.navigationController pushViewController:berbeitenViewController animated:YES]; }
firstChildViewController = berbeitenViewController in code:
- (void) setup { self.navigationItem.hidesBackButton = YES; } // Implement loadView to create a view hierarchy programmatically, without using a nib. - (void)loadView { NSLog(@"BerbeitenViewController: loadView"); UIView *mainView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] applicationFrame].size.width, [[UIScreen mainScreen] applicationFrame].size.height)] autorelease]; [mainView setBackgroundColor:[UIColor darkGrayColor]]; mainView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; mainView.contentMode = UIViewContentModeScaleToFill; [mainView setAutoresizesSubviews:YES]; berbeitenBackBtn = [[UIButton alloc] initWithFrame:CGRectMake(5, 23, 69, 36)]; [berbeitenBackBtn setBackgroundImage:[UIImage newImageFromResource:@"back_btn.png"] forState:UIControlStateNormal]; [berbeitenBackBtn addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside]; [berbeitenBackBtn setEnabled:TRUE]; [self.navigationController.view addSubview:berbeitenBackBtn]; [berbeitenBackBtn release]; berbeitenAddBtn = [[UIButton alloc] initWithFrame:CGRectMake(260, 23, 55, 36)]; [berbeitenAddBtn setBackgroundImage:[UIImage newImageFromResource:@"bearbeiten_add_btn.png"] forState:UIControlStateNormal]; [berbeitenAddBtn addTarget:self action:@selector(addCompany:) forControlEvents:UIControlEventTouchUpInside]; [berbeitenAddBtn setEnabled:TRUE]; [self.navigationController.view addSubview:berbeitenAddBtn]; [berbeitenAddBtn release]; companiesTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] applicationFrame].size.width, 366)]; companiesTable.delegate = self; companiesTable.dataSource = self; [mainView addSubview:companiesTable]; [companiesTable release]; self.view = mainView; } - (void)viewDidLoad { NSLog(@"BerbeitenViewController viewDidLoad"); [super viewDidLoad]; self.title = @"Edit watchlist"; } //MARK: Buttons actions - (void) popViewController:(UIButton *) sender { NSLog(@"Pop BerbeitenViewController"); [self.navigationController popViewControllerAnimated:YES]; } - (void) addCompany:(UIButton *) sender { NSLog(@"Berbeiten addCompany btn pushed"); if(searchViewController == nil){ searchViewController = [[SearchViewController alloc] init]; [searchViewController setup]; } [self.navigationController pushViewController:searchViewController animated:YES]; }
secondChildViewController = searchViewController in code
- (void) setup { self.navigationItem.hidesBackButton = YES; }