2009-08-04 7 views
5

Je suis un développeur iPhone débutant. Mon code est le suivant:Modifier le texte d'un UILabel (UIBarButtonItem) sur une barre d'outils par programme

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UILabel *lblTotCaratteri = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 25, 15)]; 
lblTotCaratteri.textAlignment = UITextAlignmentCenter; 
lblTotCaratteri.font = [UIFont italicSystemFontOfSize:13.0]; 
lblTotCaratteri.textColor = [UIColor greenColor]; 
lblTotCaratteri.backgroundColor = [UIColor clearColor]; 
lblTotCaratteri.adjustsFontSizeToFitWidth = YES; 
lblTotCaratteri.text = @"0"; 

UIBarButtonItem *lblCaratteri = [[UIBarButtonItem alloc] initWithCustomView: lblTotCaratteri]; 

inserimentoToolbar.items = [NSArray arrayWithObjects:fixedSpace, lblCaratteri, fixedSpace, nil]; 

Donc à mon avis, j'ai une UITextView et cette barre d'outils créés par programme. Je veux changer le texte de l'étiquette chaque fois que j'ajoute un caractère à UITextView. Chaque fois que le texte UITextView change, je peux afficher une alerte à chaque touche enfoncée. Je n'arrive pas à comprendre comment changer le texte de l'étiquette. J'espère avoir expliqué mon scénario. Désolé pour mon anglais. Salutations, Luca.

+2

Avez-vous une référence à lblTotCaratteri? Sinon, déclarez-le dans votre @interface. Dans ce cas, ne pas le redéclarer avec UILabel * (ligne 2 ci-dessus). Ensuite, vous pouvez appeler lblTotCaratteri.text = @ "newtexthere". – mjhoy

+0

Ça a marché! Je l'ai ajouté à l'interface et bien sûr je ne l'ai pas redéclaré. Comment puis-je marquer votre commentaire comme réponse? Merci encore! – crash

+0

J'ai remarqué que votre variable s'appelle fixedSpace, mais sa valeur est en fait FlexibleSpace. Est-ce une erreur? – mk12

Répondre

6

Un moyen serait, en supposant inserimentoToolbar est déclaré dans votre interface:

[(UILabel *)[[toolbar.items objectAtIndex:1] view] setText:@"sometext"]; 

Cela fonctionne vraiment seulement en supposant que votre barre d'outils ne change pas (en termes d'objets).

OU

La solution la plus idéale serait de mettre lblTotCaratteri dans votre interface (dans votre fichier d'en-tête). Comme:

@interface UntitledViewController : UIViewController { 
    UILabel *lblTotCaratteri; 
} 

Ensuite, votre code inclus serait comme

UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
lblTotCaratteri = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 25, 15)]; 
lblTotCaratteri.textAlignment = UITextAlignmentCenter; 
// etc etc etc 

Puis, à tout moment, il suffit d'utiliser

lblTotCaratteri.text = @"sometext"; 
+0

Désolé mjhoy que j'ai essentiellement réaffirmé votre réponse dans la deuxième partie. Je ne l'ai pas vu plus tôt. – Neil

+0

Comme je l'ai déjà commenté, cela fonctionnait en ajoutant l'étiquette à l'interface et en l'appelant partout où j'en avais besoin. Merci pour votre réponse aussi. – crash

5

Yo, Cela a fonctionné pour moi, je change le titre UIBarButtonItem quand Je clique sur le même UIBarButtonItem. Cela signifiait que mon besoin était une sorte de bascule. Si vous cliquez la première fois sur "MyText1", cliquez à nouveau sur "MyText2". Le texte bascule lorsque l'utilisateur clique sur le bouton.

-(IBAction)myBarButtonItem:(id)item{ 

if(flag){ 
    flag=FALSE; 
    [(UIBarButtonItem *)item setTitle:@"MyText1"]; 
} 
else{ 
    flag=TRUE; 
    [(UIBarButtonItem *)item setTitle:@"MyText2"]; 
} 

REMARQUE: je n'ai pas créé UIBarButtonItem par programme. J'ai créé dans Interface Builder et défini la référence de la méthode "myBarButtonItem" à ce bouton. Donc quand UIBarButtonItem ou dites ce type de bouton est pressé, il appelle la méthode "myBarButtonItem" et envoie la référence du bouton comme paramètre que je tape en plus (UIBarButtonItem *) et utilise la propriété setTitle pour changer son texte ou dire son titre.

*** Déclarez la signature de la méthode, c'est-à-dire Dans votre fichier d'en-tête: - (IBAction) myBarButtonItem: (id) item;

+0

'.text' ne semble pas exister (plus?), mais '.title' le fait. – Roger

+0

N'a pas fonctionné pour moi par programme. –

Questions connexes