99 votes

Ajouter un UILabel à une UIToolbar

J'essaie d'ajouter une étiquette à ma barre d'outils. Button fonctionne très bien, mais lorsque j'ajoute l'objet label, il se bloque. Des idées?

 UIBarButtonItem *setDateRangeButton = [[UIBarButtonItem alloc] initWithTitle:@"Set date range"
                                                                       style:UIBarButtonItemStyleBordered
                                                                      target:self
                                                                      action:@selector(setDateRangeClicked:)];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 20, 20)];
label.text = @"test";

[toolbar setItems:[NSArray arrayWithObjects:setDateRangeButton,label, nil]];

// Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];

// Reload the table view
[self.tableView reloadData];
 

129voto

adam Points 10572

Regarde ça

 [[UIBarButtonItem alloc] initWithCustomView:yourCustomView];
 

Essentiellement, chaque élément doit être un "bouton", mais il peut être instancié avec la vue souhaitée. Voici un exemple de code. Remarque: étant donné que les autres boutons se trouvent généralement dans la barre d’outils, des espaceurs sont placés de chaque côté du bouton de titre afin qu’il reste centré.

 NSMutableArray *items = [[self.toolbar items] mutableCopy];

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[items addObject:spacer];
[spacer release];

self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0 , 11.0f, self.view.frame.size.width, 21.0f)];
[self.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:18]];
[self.titleLabel setBackgroundColor:[UIColor clearColor]];
[self.titleLabel setTextColor:[UIColor colorWithRed:157.0/255.0 green:157.0/255.0 blue:157.0/255.0 alpha:1.0]];
[self.titleLabel setText:@"Title"];
[self.titleLabel setTextAlignment:NSTextAlignmentCenter];

UIBarButtonItem *spacer2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[items addObject:spacer2];
[spacer2 release];

UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithCustomView:self.titleLabel];
[items addObject:title];
[title release];

[self.toolbar setItems:items animated:YES];
[items release];
 

121voto

Matt R Points 121

Pour ceux qui utilisent une Interface Builder pour la mise en page de votre barre d'outils, il est également possible de le faire en utilisant l'Interface Builder seul.

Pour ajouter une étiquette à une barre d'outils, vous devez ajouter un générique UIView objet à votre Barre d'outils de l'IB par le glissement d'un nouveau UIView objet au-dessus de votre UIToolbar. IB va automatiquement créer un UIBarButtonItem qui sera initialisée avec votre custom UIView. Ajoutez ensuite un UILabel à la UIView et de modifier l'étiquette graphiquement pour correspondre à votre style préféré. Vous pouvez ensuite définir visuellement votre fixe et/ou variable entretoises comme pour positionner votre étiquette de façon appropriée.

Vous devez également définir l'arrière-plan de l'UILabel et la UIView à clearColor pour obtenir la barre d'outils pour afficher correctement sous le label.

6voto

Alasdair Allan Points 1773

L’une des choses pour lesquelles j’utilise cette astuce consiste à instancier un UIActivityIndicatorView au-dessus de la barre d’outils, ce qui ne serait pas possible autrement. Par exemple, ici, j'ai une barre d'outils avec 2 UIBarButtonItems, un élément de bouton de barre d'espace flexible, puis un autre UIBarButtonItem. Je souhaite insérer un UIActivityIndicatorView dans la barre d’outils entre l’espace flexible et le bouton final (main droite). Donc, dans mon RootViewController, je fais ce qui suit,

 - (void)viewDidLoad {
[super viewDidLoad];// Add an invisible UIActivityViewIndicator to the toolbar
UIToolbar *toolbar = (UIToolbar *)[self.view viewWithTag:767];
NSArray *items = [toolbar items];

activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 20.0f, 20.0f)];
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];	

NSArray *newItems = [NSArray arrayWithObjects:[items objectAtIndex:0],[items objectAtIndex:1],[items objectAtIndex:2],
					 [[UIBarButtonItem alloc] initWithCustomView:activityIndicator], [items objectAtIndex:3],nil];
[toolbar setItems:newItems];}
 

2voto

Todd Horst Points 272

Similaire à Matt RI utilisé constructeur d'interface. Mais je voulais avoir 1 uiwebview à l'intérieur à la place pour que je puisse avoir du texte en gras et d'autres non (comme l'application mail). Alors

  1. Ajoutez la vue Web à la place.
  2. Décocher opaque
  3. Assurez-vous que la couleur de fond est claire
  4. Tout brancher avec iboutlet
  5. Utilisez le code HTML ci-dessous pour obtenir un arrière-plan transparent afin que la barre d'outils transparaisse

Code:

 NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];
NSString *html = [NSString stringWithFormat:@"<html><head><style>body{font-size:11px;text-align:center;background-color:transparent;color:#fff;font-family:helvetica;vertical-align:middle;</style> </head><body><b>Updated</b> 10/11/12 <b>11:09</b> AM</body></html>"];
[myWebView loadHTMLString:html baseURL:baseURL];
 

1voto

user1938695 Points 113

Essaye ça:

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(140 , 0, 50, 250)];
[label setBackgroundColor:[UIColor clearColor]];
label.text = @"TEXT";
UIView *view = (UIView *) label;
[self.barItem setCustomView:view];
 

Remarque: self.barItem est un UIBarButtonItem ajouté à partir de la bibliothèque d'objets et placé entre deux espaces flexibles.

Une autre méthode consiste à supprimer la ligne [self.barItem setCustom:view] et à modifier les paramètres de la label (largeur) afin qu'elle remplisse la barre d'outils entière et définisse l'alignement au centre et à la police par vous-même dans le code ,

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