0

J'ai mis mon expérience avec ce barre de navigation code dans mon délégué App:UINavigationBar Image de fond Problème

@implementation UINavigationBar (UINavigationBarCategory) 
- (void)drawRect:(CGRect)rect { 
    UIImage *backgroundImage = [UIImage imageNamed: @"Nav-rightpane.png"]; 

    CGContextDrawImage(UIGraphicsGetCurrentContext(), 
         CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), 
         backgroundImage.CGImage); 
} 
@end 

Cela fonctionne parfaitement, mais maintenant je dois changer l'arrière-plan de la valeur par défaut à UIPopoverController. Une idée pour ça?

Merci

Répondre

0

Ne pas utiliser cette solution. Il suffit de supprimer votre Catégorie UINavigationBar et implémentez votre propre UINavigationController.

@interface XNavigationController : UINavigationController{} 

et le changement override méthode viewDidLoad mise en œuvre

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *img = [UIImage imageNamed: @"Nav-rightpane.png"]; 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:img]; 
    [imageView setFrame:self.navigationBar.bounds]; 
    [imageView setContentMode:UIViewContentModeScaleToFill]; 
    [self.navigationBar addSubview:imageView]; 
    [imageView release]; 
} 

Il faut donc utiliser ce navigationController lorsque vous voulez changer l'arrière-plan de la barre de navigation.

0

La bonne solution pré-iOS5, tel que recommandé par les ingénieurs d'Apple est de ne pas catégories d'utilisation et non méthode d'utilisation swizzling. Ceci est confirmé à se briser sur iOS 5 qui est très proche d'être publié. Au lieu de cela, vous devez créer une sous-classe UINavigationBar, remplacer la méthode drawRect:, puis utiliser Interface Builder pour définir votre contrôleur de navigation. Interface Builder vous permet de changer le nom de classe pour la barre de navigation à votre sous-classe personnalisée:

enter image description here

enter image description here

Si vous voulez éviter Interface Builder, vous pouvez créer un XIB temporaire et charger une instance de le contrôleur de navigation à partir de celui-ci, puis utilisez NSKeyedArchiver pour l'archiver dans un fichier. Ensuite, utilisez xxd -i <filename> sur la ligne de commande pour générer le code C pour les octets bruts du contrôleur de navigation. Puis collez-le dans un fichier source et désarchivez-le lorsque vous voulez une instance.

Cela semble beaucoup de travail, mais les vidéos WWDC et les ingénieurs sur les forums ont déclaré à plusieurs reprises que c'est le seul moyen sûr et fiable de faire ce que vous voulez.

Dans iOS 5, tout cela devient beaucoup plus facile.