2014-12-04 8 views
5

Zasadniczo mam trzy przyciski na moim głównym ekranie.Swift - Zmień kolor i rozmiar tekstu po dotknięciu UIButton

Po wybraniu jednego z tych przycisków chciałbym, aby tekst na wybranym przycisku zmienił się na pogrubiony i zmienić kolor (niebieski).

Po wybraniu innego przycisku chciałbym, aby nowo wybrany przycisk został zmieniony na pogrubiony i zmienił kolor (niebieski), a poprzednio wybrany przycisk, aby powrócić do normalnego. (niepogrubiony i czarny tekst)

Mam te przyciski wysyłające akcję do skryptu.

To jest to, co mam, nie mogę sprawić, żeby działało. Pomoc będzie bardzo mile widziane!

@IBAction func buttonOne(sender: UIButton){ 
    sender.setTitleColor(UIColor.blueColor(), forState: UIControlState.Highlighted) 
} 

Próbowałem. Podświetlony i wybrany na UIControlState, nie wydaje się działać. Próbowałem również następujące, ale nie mogę go uruchomić.

@IBAction func buttonOne(sender: UIButton){ 
    sender.titleLabel?.textColor = UIColor.blueColor() 
} 

Pomyślałem, że skoro nadawca był UIButton, i to, że przycisk został kliknięty, przyjmując wartości poza nim i resetowanie im będzie działać. Wierzę, że czegoś brakuje.

Dziękuję

Odpowiedz

4

Brzmi jak chcesz UIControlState.Normal

Selected nic nie robi w większości przypadków, a Highlighted jest tylko wtedy, gdy jesteś naciskając przycisk. Zobacz więcej informacji tutaj: https://developer.apple.com/library/ios/documentation/uikit/reference/uicontrol_class/index.html#//apple_ref/doc/constant_group/Control_State

+0

Dzięki! Zmienił kolor na czarny. Przez ostatnią godzinę waliłem głową w monitor i nie mogłem tego rozgryźć. Dziękuję Ci! Pytanie uzupełniające - w jaki sposób mogę przywrócić czarne przyciski po naciśnięciu nowego przycisku? – Nate4436271

+0

(Czarny? Myślisz, że chcesz niebieski?) Połącz każdy przycisk jako właściwość IBOutlet w kontrolerze widoku, a gdy zadziała IBAction, w tej metodzie również zmień inne przyciski. Prawdopodobnie potrzebna jest właściwość, która zapamiętuje, który przycisk jest aktywny (np. Numer od 1 do 3 itd.). Można również rozważyć użycie segmentowanego elementu sterującego zamiast 3 oddzielnych przycisków. – shim

+1

Chciałbym, aby aktywne pole było niebieskie, a nieaktywne pola były czarne. Twoje sugestie były bardzo pomocne, dziękuję! – Nate4436271

2

Może można zrobić z transformacji ...

@IBAction func buttonPressed(sender: UIButton) { 
    sender.titleLabel!.textColor = UIColor.blueColor() 
    sender.transform = CGAffineTransformMakeScale(0.8, 0.8) 
} 

@IBAction func buttonReleased(sender: UIButton) { 
    sender.titleLabel!.textColor = UIColor.redColor() 
    sender.transform = CGAffineTransformIdentity 
} 
+0

Dzięki za szybką odpowiedź! Ponieważ mam trzy przyciski, chciałbym uniknąć tworzenia dwóch funkcji dla każdego przycisku. Jeśli nie mogę wymyślić stany, chory spróbuj tego. Wydaje się, że to dobre rozwiązanie. – Nate4436271

+0

po prostu przytrzymaj tablicę dla 3 przycisków i wykonaj ich iterację w funkcji kliknięcia, aby je zresetować. następnie ustaw stan kliknięcia dla tego, który został kliknięty. – datayeah

0

Zapewnić tagów do wszystkich przycisków, podłączyć każdy działania przycisków na samej funkcji i spróbować następujący kod:

@IBAction func butnClicked (Sender: UIButton) {

for tg in 1...2 { 
     print(sender.tag) 
     let tmpButton = self.view.viewWithTag(tg) as? UIButton 
     if tmpButton?.tag == sender.tag { 
      tmpButton?.setTitleColor(.red, for: .normal) 
     } else { 
      tmpButton?.setTitleColor(.gray, for: .normal) 
     } 
    } 

Nadzieja będzie pomagać.

Powiązane problemy