2009-08-04 11 views
5

Sono uno sviluppatore iPhone principiante. Il mio codice è il seguente:Modificare il testo di un UILabel (UIBarButtonItem) su una barra degli strumenti a livello di programmazione

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

Quindi, a mio avviso ho un'UITextView e questa barra degli strumenti creata a livello di codice. Voglio cambiare il testo dell'etichetta ogni volta che aggiungo un carattere a UITextView. Ogni volta che il testo di UITextView cambia, posso visualizzare un avviso ogni tasto premuto. Non riesco a capire come modificare il testo dell'etichetta. Spero di aver spiegato il mio scenario. Ci scusiamo per il mio inglese. Saluti, Luca.

+2

Hai un riferimento a lblTotCaratteri? Altrimenti, dichiaralo nella tua @interface. Se è così, non ridichiarlo con UILabel * (nella riga 2 sopra). Quindi puoi chiamare lblTotCaratteri.text = @ "newtexthere". – mjhoy

+0

Ha funzionato! L'ho aggiunto all'interfaccia e ovviamente non l'ho ridichiarato. Come posso contrassegnare il tuo commento come risposta? Grazie ancora! – crash

+0

Ho notato che la tua variabile si chiama fixedSpace, ma il suo valore è in realtà FlexibleSpace. È un Mistage? – mk12

risposta

6

Un modo potrebbe essere, assumendo inserimentoToolbar è dichiarata nell'interfaccia:

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

Questo in realtà funziona solo assumendo la toolbar non cambia (in termini di oggetti).

O

La soluzione più ideale sarebbe quello di mettere lblTotCaratteri nell'interfaccia (nel file di intestazione). Come:

@interface UntitledViewController : UIViewController { 
    UILabel *lblTotCaratteri; 
} 

Poi il codice incluso sarebbe proprio come

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 

Poi in qualsiasi momento, basta usare

lblTotCaratteri.text = @"sometext"; 
+0

Scusa mjhoy che ho sostanzialmente riformulato la tua risposta nella seconda parte. Non l'ho visto prima. – Neil

+0

Come ho già detto prima, ha funzionato aggiungendo l'etichetta all'interfaccia e chiamandola ovunque ne avessi bisogno. Grazie anche per la risposta. – crash

5

Yo, questo ha funzionato per me, a cambiare il titolo UIBarButtonItem quando Faccio clic sullo stesso UIBarButtonItem. Il mio bisogno era una specie di flipflop. Se fai clic per la prima volta, dice "MyText1", quindi fai nuovamente clic, il titolo cambia in "MyText2". Il testo cambia quando l'utente fa clic sul pulsante.

-(IBAction)myBarButtonItem:(id)item{ 

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

NOTA: non ho creato UIBarButtonItem al livello di programmazione. Ho creato in Interface Builder e ho impostato il riferimento del metodo "myBarButtonItem" a questo pulsante. Quindi quando UIBarButtonItem o si preme questo tipo di pulsante viene chiamato metodo "myBarButtonItem" e invia il riferimento del pulsante come parametro che scrivo ulteriormente cast (UIBarButtonItem *) e uso la proprietà setTitle per cambiare il suo testo o pronunciare title.

*** Dichiarare la firma del metodo, ovvero Nel file di intestazione: - (IBAction) myBarButtonItem: (id) elemento;

+0

'.text' non sembra esistere (più?), ma '.title' lo fa. – Roger

+0

Non ha funzionato per me a livello di programmazione. –

Problemi correlati