Question

I have a problem, I need to insert an image in a UIBarButtonItem, but it doesn't shows the button with the image.

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

    UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:menuVC];

    UINavigationBar *barraNav = navVC.navigationBar;
    [barraNav setBackgroundImage:[UIImage imageNamed:@"navigationBar.png"] forBarMetrics:UIBarMetricsDefault];

    // HERE
    UINavigationItem *navItem = [[UINavigationItem alloc] init];
    navItem = navVC.navigationItem;
    UIBarButtonItem *botonIzq = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bNavBarIzq.png"] style:UIBarButtonItemStylePlain target:self action:nil];
    [navItem setLeftBarButtonItem:botonIzq];

    self.window.rootViewController = navVC;

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    return YES;
}
Was it helpful?

Solution

A navigation item is not a feature of a navigation controller but of one of its children. It is the menuVC whose navigation item should be set here.

Moreover, this should rightly be the job of menuVC, i.e. the code should be in its class - this is not the job of the app delegate (though there is nothing strictly wrong with that, it's just a "proper division of labor" type of thing).

OTHER TIPS

This should work :

UIImage *image = [[UIImage imageNamed:@"bNavBarIzq.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *botonIzq = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)];

You are using wrong navigation item. You should use menuVC one, instead of navVC.

Just try:

UIBarButtonItem *botonIzq = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bNavBarIzq.png"] style:UIBarButtonItemStylePlain target:self action:nil];
menuVC.navigationItem.leftBarButtonItem = botonIzq;

Also, please, check this code:

// HERE
UINavigationItem *navItem = [[UINavigationItem alloc] init];
navItem = navVC.navigationItem;

You've created navItem, and then override it. You should refactor it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top