iosuitoolbaruitoolbaritem

Toolbar doesn't show up in iOS


I am new to iOS and using below code to display toolbar. same code works for other screens.

I have debug the code and it goes into show toolbar method and completes viewDidLoad method without any exception. then also toolbar is not coming..

But it doesn't show up the toolbar in UI..Please help me to solve the issue...

Below is the implementation code.

 @implementation HistoryViewController

    @synthesize wasLandscape;

    - (HistoryViewController *)init {
    if (self = [super init]) {
        //Set App Delegate
        appDelegate = [[UIApplication sharedApplication] delegate];

        //Set up an encyclopedia object for me
        encBook = [[Encyclopedia alloc] init];
        [[appDelegate prefsdb] loadHistoryEncyclopedia:encBook];
    }

    return self;
}

    // Override to allow orientations other than the default portrait orientation.
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return YES;
}

    //Handle appearance
    - (void) didRotateFromInterfaceOrientation:            (UIInterfaceOrientation)interfaceOrientation
{
//Kill the old, make the new
    [self hideToolbar];
    [self showToolbar];
}

   //Handle appear include Toolbar
   - (void)viewWillAppear:(BOOL)animated {
    [self showToolbar];
    [super viewWillAppear:animated];
}

//Remove the toolbar if we are disappearing
- (void)viewWillDisappear:(BOOL)animated {
    [self hideToolbar];
    [super viewWillDisappear:animated];
}


//Destroy the toolbar
- (void) hideToolbar {
    if(toolbar != nil){
        //Remove what we added
        [toolbar removeFromSuperview];
        [toolbar release];
        toolbar = nil;
    }
}


//Make the toolbar
- (void) showToolbar {
    BOOL landscape = (self.interfaceOrientation == UIDeviceOrientationLandscapeLeft || self.interfaceOrientation == UIDeviceOrientationLandscapeRight);

    // double check
    if (!landscape) {
        if (wasLandscape) {
            landscape = YES;
            wasLandscape = NO;
        }
    }

    //iOS4 accomodation
    if(toolbar != nil){
        [toolbar removeFromSuperview];
        [toolbar release];
        toolbar = nil;
    }

    //Initialize the toolbar -----------------------------------------------------------
    toolbar = [[UIToolbar alloc] init];
    toolbar.barStyle = UIBarStyleDefault;

    //Set the toolbar to fit the width of the app.
    [toolbar sizeToFit];

    //Caclulate the height of the toolbar
    CGFloat toolbarHeight = [toolbar frame].size.height;

    //Get the bounds of the parent view
    CGRect rootViewBounds = self.parentViewController.view.bounds;

    //Get the height of the parent view.
    CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);

    //Get the width of the parent view,
    CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);

    //Create a rectangle for the toolbar
    CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);

    //Reposition and resize the receiver
    [toolbar setFrame:rectArea];

    // create buttons

    UIBarButtonItem *bookmarkButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(showBookmarks:)];
    //bookmarkButton.TintColor = [UIColor colorWithRed:0.0 green:0.31 blue:0.56 alpha:1.0];
    // for spacing
    UIBarButtonItem *fixer1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    UIBarButtonItem *fixer2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    UIBarButtonItem *fixer3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    UIBarButtonItem *fixer4 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];

    if (!landscape) {
        fixer1.width = 32;
        fixer2.width = 32;
        fixer3.width = 32;
        fixer4.width = 32;
    } else {
        fixer1.width = 78;
        fixer2.width = 78;
        fixer3.width = 78;
        fixer4.width = 78;
    }

    [toolbar setItems:[NSArray arrayWithObjects:fixer4, bookmarkButton, nil]];


    //Add the toolbar as a subview to the navigation controller.
    [self.navigationController.view addSubview:toolbar];    

}
- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc {
    [super dealloc];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // The method hideStatusbar called after 2 seconds
    [self showToolbar];
    // Do any additional setup after loading the view, typically from a nib.
}

@end

Solution

  • using CGRect rootViewBounds = [UIScreen mainScreen].bounds; solved the problem.