2010-02-27 2 views
1

J'essaie d'implémenter UINavigationBar avec des contrôles personnalisés. Donc, j'ai ajouté UIView sur le côté gauche de UINavigationBar et d'essayer d'ajouter des contrôles à ce UIView avec le code suivant:customView sur le bouton gauche de UINavigationBar

UIView *view = navigationController.navigationItem.leftBarButtonItem.customView; 
UIButton *button = [[UIButton alloc] initWithFrame:view.frame]; 
[button setTitle:@"TEST" forState:UIControlStateNormal]; 
[view addSubview:button]; 
[button sizeToFit]; 
[button release]; 

code fonctionne, mais le bouton n'apparaît pas.

Toute aide serait appréciée. Merci.

UPD

OK, j'ai donné un essai au code ci-dessous et a fait une telle chose:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40, 50)]; 
[button setTitle:@"XXX" forState:UIControlStateNormal]; 
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
navigationController.visibleViewController.navigationItem.leftBarButtonItem = customItem; 
[customItem release]; 
[button release]; 

Le titre "XXX" ne semble, mais il semble que l'étiquette simple, pas le bouton. Des idées?

Répondre

4

Oui, votre UIButton ne vient avec aucun ombrage. Ce que je l'ai fait est utilisé UISegmentedControl pour obtenir ombrage gratuitement:

// Add the Menu button to the navigation bar 
NSString* menuLabel = "ShadeButton"; 
CGSize textSize = [menuLabel sizeWithFont:[UIFont systemFontOfSize:15.0]]; 
UISegmentedControl* menuSegmentedButton = [[UISegmentedControl alloc] 
    initWithFrame:CGRectMake(0.0f, 0.0f, textSize.width, 29.0f)]; 
menuSegmentedButton.momentary = YES; 
menuSegmentedButton.selected = NO; 
menuSegmentedButton.segmentedControlStyle = UISegmentedControlStyleBar; 
[menuSegmentedButton insertSegmentWithTitle:menuLabel atIndex:0 
           animated:NO]; 
[menuSegmentedButton addTarget:self action:@selector(doMenu) 
     forControlEvents:UIControlEventValueChanged]; 
UIBarButtonItem* barButton = [[UIBarButtonItem alloc] 
    initWithCustomView:menuSegmentedButton]; 
[menuSegmentedButton release]; 
self.navigationItem.rightBarButtonItem = barButton; 

Créez votre UIBarButtonItem avec le UISegmentedControl comme indiqué ci-dessus plutôt que d'un UIButton et vous devriez obtenir l'effet que vous êtes après. L'alternative est de faire plus de travail sur le bouton et de créer une texture/image personnalisée pour vous-même.

+0

OK, je vais essayer dans la semaine la plus proche et si cela fonctionne - je vais vous donner cette prime :) –

+0

Look du bouton semble différer des styles standard, mais ce n'est pas grave pour moi - il devrait être écorché. Merci de votre aide. –

3

Notez bien.

Si vous voulez juste un autre titre:

UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithTitle:@"TEST" style:UIBarButtonItemStylePlain target:nil action:nil]; 
navigationController.navigationItem.leftBarButtonItem = customItem; 
[customItem release]; 

Si vous voulez vraiment une vue personnalisée:

// Create Custom View called myView. 
UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithCustomView:myView]; 
navigationController.navigationItem.leftBarButtonItem = customItem; 
[customItem release]; 
Questions connexes