2009-08-04 19 views
5

Jestem początkującym programistą iPhone'a. Mój kod jest następujący:Programowo programowo zmienia tekst UILabel (UIBarButtonItem) na pasku narzędzi.

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

Więc moim zdaniem mam UITextView i ten pasek utworzony programowo. Chcę zmienić tekst etykiety za każdym razem, gdy dodaję znak do UITextView. Za każdym razem, gdy zmienia się tekst UITextView, mogę wyświetlić alert każdego naciśniętego klawisza. Nie mogę wymyślić, jak zmienić tekst etykiety. Mam nadzieję, że wyjaśniłem mój scenariusz. Przepraszamy za mój angielski. Pozdrowienia, Luca.

+2

Czy masz odniesienia do lblTotCaratteri? Jeśli nie, zadeklaruj go w swoim @ interfejsie. Jeśli tak, nie przerysuj go za pomocą UILabel * (w linii 2 powyżej). Następnie możesz wywołać lblTotCaratteri.text = @ "newtexthere". – mjhoy

+0

To zadziałało! Dodałem go do interfejsu i oczywiście go nie redeclare. Jak mogę oznaczyć komentarz jako odpowiedź? Jeszcze raz dziękuję! – crash

+0

Zauważyłem, że twoja zmienna nazywa się fixedSpace, ale jej wartość jest faktycznie elastyczna. Czy to jest misterake? – mk12

Odpowiedz

6

Jednym ze sposobów byłoby, zakładając inserimentoToolbar jest zadeklarowane w interfejsie:

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

To naprawdę działa tylko przy założeniu, że pasek nie zmienia (w zakresie obiektów).

LUB

Im bardziej idealnym rozwiązaniem byłoby umieścić lblTotCaratteri w interfejsie (w pliku nagłówkowym). Jak:

@interface UntitledViewController : UIViewController { 
    UILabel *lblTotCaratteri; 
} 

Wtedy twój zawarte kod będzie tak jak

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 

Następnie w dowolnym momencie, wystarczy użyć

lblTotCaratteri.text = @"sometext"; 
+0

Przepraszam, mjhoy, że zasadniczo poprawiłem twoją odpowiedź w drugiej części. Nie widziałem tego wcześniej. – Neil

+0

Jak już wcześniej pisałem, zadziałało dodanie etykiety do interfejsu i wywołanie go tam, gdzie było to potrzebne. Dziękuję również za odpowiedź. – crash

5

Yo, ten pracował dla mnie, zmienić tytuł UIBarButtonItem gdy jest Klikam na ten sam UIBarButtonItem. Znaczenie mojej potrzeby było rodzaju flipflop. Jeśli klikniesz pierwszy raz, gdy pojawi się "MyText1", kliknij ponownie, tytuł zmieni się na "MyText2". Tekst przełącza się, gdy użytkownik kliknie przycisk.

-(IBAction)myBarButtonItem:(id)item{ 

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

UWAGA: Nie stworzyłem programowo UIBarButtonItem. Stworzyłem w Interface Builder i ustawiłem odnośnik metody "myBarButtonItem" na ten przycisk. Więc kiedy UIBarButtonItem lub powiedzmy, że ten typ przycisku jest wciśnięty, wywołuje metodę "myBarButtonItem" i wysyła odwołanie do przycisku jako parametru, który dodatkowo piszę do (UIBarButtonItem *) i użyj właściwości setTitle, aby zmienić tekst lub wypowiedzieć tytuł.

*** Złożyć podpis metody, tj. W pliku nagłówkowym: - (IBAction) myBarButtonItem: (id) element;

+0

'.text' nie wydaje się istnieć (już?), ale '.title' robi. – Roger

+0

Nie działa programowo. –

Powiązane problemy