33 votes

Barre de navigation personnalisée

J'étais en train de ramper Dribbler et a trouvé le joint de la conception. Je me demandais comment faire une barre de navigation personnalisée comme ça. Je veux dire, comment créer la barre de navigation une fois et de le réutiliser implicitement pour tous les contrôleurs de vue.

Je pensais avoir une sorte de vue de la racine de contrôleur et d'héritage pour les autres contrôleurs de vue, mais je ne sais pas comment faire.

Toute idée ou un lien est appreachated!

Des acclamations.

Cyril

Nav bar image

8voto

Sebastien Peek Points 1311

Grâce à iOS5 vous êtes maintenant en mesure de personnaliser l'apparence d'un UINavigationBar sans avoir à la sous-classe ou créer une catégorie.

Le bloc de code suivant (les mettre dans votre applicationDidFinishLoading: méthode) va changer la UINavigationBar pour l'ensemble de la demande quelle que soit l'image que vous donnez.

Remarque, cela ne fonctionnera que dans iOS5

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav bar.png"] forBarMetrics:UIBarMetricsDefault];

Cependant, vous êtes également en mesure de modifier l'apparence d'un seul UINavigationBar en fonction de ce que la vue du contrôleur que vous êtes en utilisant le code suivant dans le viewDidLoad.

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav bar.png"] forBarMetrics:UIBarMetricsDefault];

Le code ci-dessus est uniquement de discuter de la nouvelle façons de personnaliser le UINavigationBar apparence grâce à iOS5. Cependant, il n'est pas de discuter de la façon dont les boutons ont été mis en œuvre.

Toutefois, l'ajout de boutons est radicalement différente. Pour cela, je vous recommande de sous-classement UINavigationBar, puis en ajoutant les boutons, si nécessaire à travers qui. Vous pourriez sans même s'en tirer avec juste une norme UINavigationBar mais la coutume UIBarButtonItems qui s'écoule d'un point de vue particulier.

Par exemple:

UIView *rightButton = [[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 30.0f, 30.0f)] autorelease];
[rightButton addSubview:[UIImage imageNamed:@"rightButtonImage.png"]];

UIBarButtonItem *rightButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:rightButton] autorelease];
[rightButtonItem setAction:@selector(rightButtonAction:)];

Je n'ai pas testé ce code, de sorte qu'il n'est pas un copier/coller de la solution, mais ça vous donne une idée de ce qui doit être fait pour atteindre "personnalisé" à la recherche UIBarButtonItems.

Bonne chance!

6voto

Stream Points 3624

Dans les anciennes versions iOS vous avez à la sous-classe UINavigationBar c'est à dire:

@interface CustomNavigationBar : UINavigationBar
@end

@implementation CustomNavigationBar

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.opaque = YES;
        self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"CustomBackground"]];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // Skip standard bar drawing
}

@end

Pour utiliser une barre de navigation personnalisée à votre vue-contrôleur, vous devez changer une norme nom de la classe CustomNavigationBar dans XIB.

Aussi, vous pouvez définir la barre de navigation personnalisée du programme:

UIViewController *tempController = [[[UIViewController alloc] init] autorelease];
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:tempController] autorelease];

NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:navigationController];
NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:archive] autorelease];
[unarchiver setClass:[CustomNavigationBar class] forClassName:@"UINavigationBar"];
UINavigationController *customNavigationController = [unarchiver decodeObjectForKey:@"root"];

UIViewController *contentController = [[[ContentViewController alloc] init] autorelease];
customNavigationController.viewControllers = [NSArray arrayWithObject:contentController];

Maintenant, customNavigationController a la barre de navigation personnalisée.

3voto

agilityvision Points 3498

définir un arrière-plan personnalisé pour la NavigationBar

UIImage *navBackground =[[UIImage imageNamed:@"navbarBackground"] 
                 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:navBackground forBarMetrics:UIBarMetricsDefault];

alors, à votre avis, Contrôleur de définir des vues personnalisées pour la gauche, rightBarButtons et le titre.

self.navigationItem.titleView = customTitleView;
self.navigationItem.leftBarButtonItem = customBarButton;
self.navigationItem.rightBarButtonItem = customBarButton2;

1voto

WrightsCS Points 32170

Vous devez faire votre propre UINavigationBar sous-classe, et de l'utiliser dans des endroits où vous auriez besoin d'un navigationController.

Dans cette classe personnalisée est l'endroit où vous allez dessiner l'arrière-plan, des boutons, du texte, etc.


Mise à jour

En fait, regardons de plus près cet exemple, il semble être un UIToolBar. Vous pouvez affecter des méthodes de navigation pour les boutons, comme popViewController: etc. Pour le "Confirmer l'Information" et l'indicateur de progression, vous pouvez utiliser une étiquette et une image. Pour le bouton de droite, de son graphisme.

Bien sûr, l'exemple que vous avez fournie est tout simplement un concept, et non une application réelle. Mais avec un peu de créativité, à quelques heures de codage et quelques heures plus de la conception graphique, vous pouvez obtenir cette même interface.

0voto

Tim Gostony Points 7276

Vous pouvez utiliser le stock UINavigationController et de masquer les UINavigationBar.

Ensuite, faire votre propre sous-classe de UIViewController qui dispose de tous les éléments de navigation, puis une flexion de la taille de point de vue où le contenu aller. De faire toutes vos classes sous-classe cet élément et à afficher dans la vue. Le bouton appelez simplement [self.navigationController popViewControllerAnimated:YES] et le UILabel à vue juste de mettre son texte en self.title.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X