Zmiana tekstu UIButton


102

Więc próbuję zaktualizować tekst na UIButton, kiedy go kliknę. Używam następującego wiersza, aby zmienić tekst:

calibrationButton.titleLabel.text = @"Calibration";

Sprawdziłem, że tekst się zmienia, ale kiedy uruchamiam aplikację i klikam przycisk, na ułamek sekundy zmienia się na „Kalibracja”, a następnie wraca do wartości domyślnej. Jakieś pomysły, dlaczego tak się dzieje? Czy jest jakaś funkcja odświeżania, którą muszę wywołać?


Odpowiedzi:


248

Podczas układania widoków podrzędnych, przycisk UIButton ustawi wartość tekstową titleLabel przy użyciu własnych wartości tytułu, dzięki czemu można ustawić do czterech różnych ciągów dla czterech stanów (normalny, podświetlony, wybrany, wyłączony).

Ze względu na tę funkcję, bezpośrednie ustawienie tekstu titleLabel nie będzie zachowywane i zostanie zresetowane za pomocą przycisku, gdy wyświetla podglądy.

Oto, co musisz zrobić, aby zmienić tekst tytułu dla stanu przycisku.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
co więc ma zrobić przycisk.titleLabel.text = @ "jakiś tekst"?
Boris Gafurov

4
@BorisGafurov Jeśli wpiszesz button.titleLabel, zobaczysz, że titleLabel jest właściwością tylko do odczytu, a więc wszystkie właściwości właściwości tylko do odczytu są również tylko do odczytu. Używanie notacji z kropką do ich edycji nie zadziała, więc potrzebujesz jawnych metod, aby je edytować. Przynajmniej dla mnie to ma sens.
erdekhayser

1
Myślę, że zmarnowałem około dwóch godzin, zanim zdałem sobie z tego sprawę (co niestety chyba już wiedziałem!)
race_carr

Dziękuję za odpowiedź.
dinesharjani

3
@erdekhayser Właściwie właściwości tylko do odczytu MOGĄ mieć właściwości do odczytu / zapisu. Używam tagu titlelabel, aby przekazać liczbę całkowitą do metody akcji. Zobacz także link do dokumentów firmy AppleAlthough this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:
Aaron,


6

programowo możesz ustawić tytuł przycisku jak poniżej:

[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

możesz także ustawić właściwość tytułu przycisku z serii ujęć.



1

Dla Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)

1

W przypadku Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)

1

Jeśli nie chcesz ustawiać tytułu dla wszystkich stanów, po prostu ustaw go na stan normalny, ponieważ tytułem stanów nieustawionych będzie domyślnie tytuł normalnego stanu.

btn.setTitle("Some text", for:.normal)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.