Mam UIButton
, które po naciśnięciu powoduje wyświetlenie nowego widoku, w którym użytkownik może zmienić niektóre ustawienia. Po odrzuceniu widoku chciałbym zaktualizować tytuł / tekst, UIButton
aby odzwierciedlić nowy stan. Dzwonię:
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];
Ale wydaje się, że nigdy nie zmienia się w stosunku do oryginalnego tekstu / tytułu określonego w IB.
ios
iphone
uibutton
uicontrolstate
George Armhold
źródło
źródło
Odpowiedzi:
Czy masz przycisk określony jako IBOutlet w swojej klasie kontrolera widoku i czy jest on prawidłowo podłączony jako gniazdo w programie Interface Builder (przeciągnij klawiszem Ctrl z nowego gniazdka referencyjnego do właściciela pliku i wybierz obiekt UIButton)? To zwykle problem, który mam, gdy widzę te objawy.
Edycja: Chociaż tak nie jest w tym przypadku, coś takiego może się również zdarzyć, jeśli ustawisz przypisany tytuł do przycisku, a następnie spróbujesz zmienić tytuł, a nie przypisany tytuł.
źródło
Rozwiązałem problem po prostu ustawiając parametr tytułu dla UIControlStateNormal i automatycznie działa on na innych stanach. Wydaje się, że problem występuje, gdy ustawisz inny stan UIControl.
źródło
Od wersji Swift 4:
źródło
Odkryłem inny problem. Może to być błąd wprowadzony w iOS 5, ale pomyślałem, że wskazałbym go każdemu, kto go spotka.
Jeśli nie ustawisz żadnego domyślnego tekstu dla przycisku w XIB, żaden tekst nie pojawi się, jeśli ustawisz go programowo. A jeśli ustawisz tekst w XIB, każdy tekst, który później przypiszesz do przycisku, zostanie programowo obcięty do rozmiaru tekstu domyślnego.
Na koniec, jeśli wyświetlasz widok za pomocą przycisku, a następnie wywołujesz inny widok (taki jak arkusz akcji), a następnie go odrzucasz, tekst przypisany do przycisku programowo zostanie usunięty, a podpis przycisku powróci do tego, co ustawisz w XIB.
źródło
Mimo że problem Caffeine Coma został rozwiązany, chciałbym przedstawić inną potencjalną przyczynę, dla której tytuł nie pojawia się na UIButtonie.
Jeśli ustawisz obraz dla UIButton za pomocą
Może obejmować tytuł. Przekonałem się o tym na własnej skórze i wyobrażam sobie, że niektórzy z was czytają tę stronę z tego samego powodu.
Zamiast tego użyj tej metody
obrazu przycisku i tytuł pozostanie bez zmian.
Przetestowałem to z programowo utworzonymi przyciskami i przyciskami utworzonymi w formacie .xib
źródło
na szybko:
źródło
Okazuje się, że doktorzy mówią ci odpowiedź! UIButton zignoruje zmianę tytułu, jeśli ma już przypisany ciąg znaków do użycia (z wydaje się być domyślnym, jaki otrzymujesz podczas korzystania z konstruktora interfejsu Xcode).
Użyłem następujących:
źródło
Jest to jeszcze jedna możliwa przyczyna:
Jeśli spróbujesz ustawić tytuł przycisku w
(id)initWithNibName: ...
metodzie, twoja właściwość przycisku nadal będzie wynosić zero. Nie został jeszcze przypisany do UIButton.Musisz mieć pewność, że ustawiasz przyciski metodą
(void)viewWillLoad
lub(void)viewWillAppear
, ale prawdopodobnie nie chcesz ustawiać ich tak późno, jak(void)viewDidAppear
.źródło
Czasami może się to naprawdę skomplikować. Prostym sposobem jest „ odświeżenie ” widoku przycisków!
źródło
Ciągle miałem z tym problemy, jedynym rozwiązaniem było dodanie obrazu i etykiety jako podglądów podrzędnych do uibutton. Potem odkryłem, że głównym problemem było to, że używałem przycisku UIButton o tytule: Attributed. Kiedy zmieniłem go na Zwykły, samo ustawienie titleLabel.text załatwiło sprawę!
źródło
@funroll ma całkowitą rację. Tutaj możesz zobaczyć, czego będziesz potrzebować. Upewnij się, że funkcja działa tylko w głównym wątku . Jeśli nie chcesz zajmować się wątkami, możesz zrobić tak na przykład: utwórz NSUserDefaults iw ViewDidLoad warunek sprawdzania został naciśnięty przycisk w innym widoku lub nie (w innym widoku ustawionym w NSUserDefaults potrzebne informacje) iw zależności od warunków ustaw potrzebny tytuł dla Twój UIButton, więc [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
źródło
Upewnij się, że jesteś w głównym wątku.
Jeśli nie, nadal zapisze tekst przycisku. Będzie tam, gdy sprawdzisz obiekt w debugerze. Ale tak naprawdę nie zaktualizuje widoku.
źródło