Ich habe eine UIButton
, die beim Drücken eine neue Ansicht aufruft, in der der Benutzer einige Einstellungen ändern kann. Wenn die Ansicht geschlossen wird, möchte ich den Titel / Text von aktualisieren UIButton
, um den neuen Status wiederzugeben. Ich rufe an:
[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];
Es scheint sich jedoch nie vom ursprünglichen Text / Titel zu ändern, wie in IB angegeben.
ios
iphone
uibutton
uicontrolstate
George Armhold
quelle
quelle
Antworten:
Haben Sie die Schaltfläche als IBOutlet in Ihrer View Controller-Klasse angegeben und ist sie als Schnittstelle im Interface Builder ordnungsgemäß verbunden (ziehen Sie bei gedrückter Strg-Taste vom neuen Referenzierungs-Outlet zum Dateibesitzer und wählen Sie Ihr UIButton-Objekt aus)? Das ist normalerweise das Problem, das ich habe, wenn ich diese Symptome sehe.
Bearbeiten: Obwohl dies hier nicht der Fall ist, kann so etwas auch passieren, wenn Sie der Schaltfläche einen zugewiesenen Titel zuweisen und dann versuchen, den Titel und nicht den zugewiesenen Titel zu ändern.
quelle
Ich habe das Problem gelöst, indem ich nur den Titelparameter für UIControlStateNormal festgelegt habe, und es funktioniert automatisch in den anderen Zuständen. Das Problem scheint zu sein, wenn Sie einen anderen UIControlState festlegen.
quelle
Ab Swift 4:
quelle
Ich habe ein anderes Problem entdeckt. Es mag ein Fehler sein, der in iOS 5 eingeführt wurde, aber ich dachte, ich würde ihn jedem anderen empfehlen, der darauf stößt.
Wenn Sie in XIB keinen Standardtext für die Schaltfläche festlegen, wird niemals ein Text angezeigt, wenn Sie ihn programmgesteuert festlegen. Wenn Sie Text in der XIB festlegen, wird jeder Text, den Sie anschließend programmgesteuert der Schaltfläche zuweisen, auf die Größe des Standardtexts abgeschnitten.
Wenn Sie schließlich die Ansicht mit Ihrer Schaltfläche anzeigen und dann eine andere Ansicht (wie ein Aktionsblatt) aufrufen und dann schließen, wird der Text, den Sie der Schaltfläche programmgesteuert zugewiesen haben, gelöscht und die Schaltflächenbeschriftung kehrt zu dem von Ihnen festgelegten Wert zurück oben in der XIB.
quelle
Obwohl das Problem mit Caffeine Coma behoben wurde, möchte ich eine weitere mögliche Ursache dafür angeben, dass der Titel nicht auf einem UIButton angezeigt wird.
Wenn Sie mit ein Bild für den UIButton festlegen
Es kann den Titel abdecken. Ich habe das auf die harte Tour herausgefunden und stelle mir vor, dass einige von Ihnen diese Seite aus demselben Grund lesen.
Verwenden Sie stattdessen diese Methode
für das Schaltflächenbild und den Titel werden nicht beeinflusst.
Ich habe dies mit programmgesteuert erstellten Schaltflächen und Schaltflächen getestet, die in einer .xib erstellt wurden
quelle
für schnell:
quelle
Es stellt sich heraus, dass die Dokumente Ihnen die Antwort geben! Der UIButton ignoriert die Titeländerung, wenn bereits eine zugewiesene Zeichenfolge verwendet werden kann (mit scheint die Standardeinstellung zu sein, die Sie bei Verwendung des Xcode Interface Builder erhalten).
Ich habe folgendes verwendet:
quelle
Eine weitere mögliche Ursache ist folgende:
Wenn Sie versuchen, den Titel der Schaltfläche in der
(id)initWithNibName: ...
Methode festzulegen, ist Ihre Schaltflächeneigenschaft weiterhin Null. Es wurde dem UIButton noch nicht zugewiesen.Sie müssen sicher sein, dass Sie Ihre Schaltflächen in einer Methode wie
(void)viewWillLoad
oder einstellen(void)viewWillAppear
, aber Sie möchten sie wahrscheinlich nicht so spät wie möglich einstellen(void)viewDidAppear
.quelle
Manchmal kann es sehr kompliziert werden. Der einfache Weg ist, die Schaltflächenansicht zu " aktualisieren "!
quelle
Ich hatte immer wieder Probleme damit. Die einzige Lösung bestand darin, dem Uibutton ein Bild und eine Beschriftung als Unteransichten hinzuzufügen. Dann stellte ich fest, dass das Hauptproblem darin bestand, dass ich einen UIButton mit dem Titel Attributed verwendete. Als ich es in Plain geändert habe, hat es den Trick gemacht, nur den titleLabel.text zu setzen!
quelle
@funroll ist absolut richtig. Hier können Sie sehen, was Sie benötigen. Stellen Sie sicher, dass die Funktion nur im Hauptthread ausgeführt wird . Wenn Sie sich nicht mit Threads befassen möchten, können Sie dies folgendermaßen tun: NSUserDefaults erstellen und in ViewDidLoad wurde die Suchbedingung in einer anderen Ansicht auf die Schaltfläche gedrückt oder nicht (in einer anderen Ansicht in NSUserDefaults benötigte Informationen) und abhängig von den Bedingungen, für die der Titel benötigt wird Ihr UIButton, also [yourButton setTitle: @ "Title" forState: UIControlStateNormal];
quelle
Stellen Sie sicher, dass Sie sich im Haupt-Thread befinden.
Wenn nicht, wird der Schaltflächentext weiterhin gespeichert. Es wird dort sein, wenn Sie das Objekt im Debugger untersuchen. Die Ansicht wird jedoch nicht aktualisiert.
quelle