I have a Universal App in which I customize my UINavigationBar.
In my iPhone AppDelegate I use this to achieve it:
@implementation UINavigationBar (CustomImage)
static NSMutableDictionary *navigationBarImages = NULL;
- (void)initImageDictionary
{
if(navigationBarImages==NULL){
navigationBarImages=[[NSMutableDictionary alloc] init];
}
}
- (void)drawRect:(CGRect)rect
{
NSLog(@"drawing navbar2");
UIImage *imageName=[navigationBarImages objectForKey:[NSValue valueWithNonretainedObject: self]];
if (imageName==nil) {
imageName=[UIImage imageNamed:@"bg_titleBar.png"];
UIImage *image = imageName;
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
}
- (void)setMyImage:(UIImage*)image
{
[navigationBarImages setObject:image forKey:[NSValue valueWithNonretainedObject: self]];
[self setNeedsDisplay];
}
@end
Now my questions: why does this code get called, although I start the iPad simulator?
And more important it seems to corrupt the UIPopoverController because it looks like this:
http://awesome-apps.com/pic/ok.png
While it should look somehow like this:
http://awesome-apps.com/pic/nok.png
Besides it corrupts more in my App, but this should be it for starters 🙂
Can anyone help me with this? Have you ever had a similar experience?
So ignore the fact that it gets called when you run in the iPad simulator, because as you’ll see in a minute even if you used two different categories (one for iPhone, one for iPad) you’d still have this problem.
Here’s why:
You are using a category to override the UINavigationBar behaviour. I assume you know what that means – crucially any and all navigation bars in your app will use your supplied methods in the category.
This can cause problems if you’re using standard apple elements that use UINavigationBars – the exact thing you’re seeing in the popover controller. What’s happening is the UIPopoverController uses a UINavigationBar. But because you’ve defined a category, the app assumes you want the popover navbar to use that category as well.
So that’s why you’re seeing your weird behaviour in your pop-over controller.
As long as you use categories you’ll have this problem, because you can’t selectively tell the system which bars should use your category.
I’d suggest you tell us exactly you’re trying to customise in the navbar, because there are other ways to achieve customisation outside of categories.