2009-08-04 2 views
5

Ich bin ein Anfänger iPhone-Entwickler. Mein Code ist folgende:Ändern Sie den Text eines UILabel (UIBarButtonItem) auf einer Symbolleiste programmgesteuert

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]; 

Also meiner Meinung nach habe ich eine UITextView und diese Symbolleiste programmatisch erstellt. Ich möchte den Beschriftungstext jedes Mal ändern, wenn ich dem UITextView ein Zeichen hinzufüge. Jedes Mal, wenn sich der UITextView-Text ändert, kann ich bei jeder gedrückten Taste eine Warnung anzeigen. Ich kann nicht herausfinden, wie man den Etikettentext ändert. Ich hoffe, ich habe mein Szenario erklärt. Entschuldigung für mein Englisch. Grüße, Luca.

+2

Haben Sie einen Bezug zu lblTotCaratteri? Wenn nicht, deklariere es in deinem @ interface. Wenn dies der Fall ist, deklarieren Sie es nicht mit UILabel * (in Zeile 2 oben). Dann können Sie lblTotCarateri.text = @ "newtexthere" aufrufen. – mjhoy

+0

Es hat funktioniert! Ich habe es der Schnittstelle hinzugefügt und es natürlich nicht neu deklariert. Wie kann ich Ihren Kommentar als Antwort markieren? Danke nochmal! – crash

+0

Ich bemerkte, dass Ihre Variable FixedSpace heißt, aber ihr Wert ist eigentlich FlexibleSpace. Ist das ein Nebel? – mk12

Antwort

6

Eine Möglichkeit wäre, unter der Annahme, inserimentoToolbar in Ihrer Schnittstelle deklariert ist:

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

Das ist wirklich nur die Symbolleiste (in Bezug auf Objekte) nicht ändert, arbeitet unter der Annahme.

ODER

Je mehr ideale Lösung wäre lblTotCaratteri in Ihrer Schnittstelle (in der Header-Datei) zu setzen. Wie:

@interface UntitledViewController : UIViewController { 
    UILabel *lblTotCaratteri; 
} 

Dann includierten Code würde wie

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 

Dann an jedem Punkt, nur verwenden

lblTotCaratteri.text = @"sometext"; 
+0

Tut mir leid, mjhoy, dass ich deine Antwort im zweiten Teil im Grunde neu formulierte. Ich habe es nicht früher gesehen. – Neil

+0

Wie ich bereits erwähnt habe, funktionierte es, indem ich das Etikett der Schnittstelle hinzufügte und es dort anrief, wo ich es brauchte. Vielen Dank für Ihre Antwort. – crash

5

Yo, das ist für mich gearbeitet, ändere ich den UIBarButtonItem Titel, wenn Ich klicke auf dasselbe UIBarButtonItem. Mein Bedürfnis war eine Art Flipflop. Wenn Sie zum ersten Mal auf "MyText1" klicken, klicken Sie erneut auf "Titel ändern" in "MyText2". Text schaltet um, wenn der Benutzer auf die Schaltfläche klickt.

-(IBAction)myBarButtonItem:(id)item{ 

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

Hinweis: Ich habe UIBarButtonItem nicht programmgesteuert erstellt. Ich habe im Interface Builder erstellt und den Verweis der Methode "myBarButtonItem" auf diese Schaltfläche gesetzt. Wenn also UIBarButtonItem gedrückt wird, ruft es die Methode "myBarButtonItem" auf und sendet die Referenz der Schaltfläche als Parameter, die ich weiter an (UIBarButtonItem *) umgebe, und benutze die setTitle-Eigenschaft, um den Text oder den Titel zu ändern.

*** Geben Sie die Signatur der Methode an, d. H. In Ihrer Header-Datei: - (IBAction) myBarButtonItem: (id) item;

+0

'.text' scheint nicht zu existieren (mehr?), aber '.title' tut es. – Roger

+0

Hat für mich programmatisch nicht funktioniert. –

Verwandte Themen