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ć?

Julian Coltea
źródło
1
możliwy duplikat tekstu napisu TitleLabel UIButton iPhone'a?
dasblinkenlight

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];
Jesse Gumpo
źródło
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ęć.

bhautikmewada191
źródło
2

Nie jest to wielka sprawa i prawdopodobnie oczywista, ale istnieje kilka stanów dostępnych dla przycisków. Jeśli podasz „zły”, tekst nie zmieni się zgodnie z oczekiwaniami.

Zauważyłem, że mój przycisk nie wyświetlał tekstu, który dodałem, używając metod pokazanych tutaj. Sprawdź to łącze, aby upewnić się, że podajesz stan UIControl, który zamierzasz.

Jaka jest różnica między UIControlStateHighlighted a UIControlStateSelected?

user3429534
źródło
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)
Stephen Chen
źródło
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)
Suraj Sonawane
źródło
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)
Johan Franzén
źródło