it-swarm.com.de

iOS: UIButton titleLabel - macht es überhaupt etwas?

Ich möchte ein UIButton mit dem Typ UIButtonTypeCustom (für die Form) erstellen. Ich möchte den Titel mit button.titleLabel zuweisen, da ich die Schriftart angeben muss. Der folgende Code sieht so aus, als sollte er funktionieren, funktioniert aber nicht - es erscheint kein Label, Punkt.

UIImage *editButtonImage = [UIImage imageNamed: @"editButton.png"];
float width = editButtonImage.size.width;
float height = editButtonImage.size.height;

UIButton *editButton = [UIButton buttonWithType: UIButtonTypeCustom];
editButton.frame = CGRectMake(0, 0, width, height);
[editButton setBackgroundImage: editButtonImage forState: UIControlStateNormal];
editButton.adjustsImageWhenHighlighted = YES;
editButton.titleLabel.text = @"Edit";
editButton.titleLabel.textColor = [UIColor whiteColor];
editButton.titleLabel.textAlignment = UITextAlignmentCenter;
editButton.titleLabel.font = [UIFont fontWithName: @"Helvetica" size: 14];
[self.view addSubview: editButton];

Jeder sagt immer, setTitle: forState: zu verwenden, aber das gibt Ihnen eine Schrift, die mir nicht gefällt. Die titleLabel-Methode ist NICHT veraltet - sie sollte funktionieren.

Ich bin schon einige Male darauf gestoßen und habe immer nur daran gearbeitet, aber ich würde es wirklich gerne herausfinden. Irgendwelche Ideen?

27
Amagrammer

Das Festlegen der titleLabel-Eigenschaft von text hat keine Auswirkungen. Rufen Sie stattdessen -setTitle:forState: über die Schaltfläche auf:

[editButton setTitle:@"Edit" forState:UIControlStateNormal]

Der Grund dafür ist, dass die Schaltfläche unterschiedliche Titel für verschiedene Status haben kann (z. B. UIControlStateDisabled, UIControlStateHighlighted). Das Festlegen einer Eigenschaft für den UIControlStateNormal-Steuerungsstatus gilt für alle Status, wenn Sie die anderen nicht explizit angeben.

In der Dokumentation für UIButton:

Diese Klasse stellt Methoden zum Festlegen des Titels, des Bilds und anderer Darstellungseigenschaften einer Schaltfläche bereit. Mit diesen Accessoren können Sie für jeden Schaltflächenstatus ein anderes Erscheinungsbild angeben.

Sie können die Farbe und die Schattenfarbe des Labels je nach Zustand anpassen. Siehe -setTitleColor:forState und -setTitleShadowColor:forState. Die übrigen Eigenschaften von titleLabel, wie textAlignment und font, sollten so funktionieren, wie Sie sie jetzt festgelegt haben, und sollten für alle Kontrollzustände gelten.

Weitere Informationen finden Sie in der Dokumentation zu UIButtons titleLabel-Eigenschaft: https://developer.Apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel selbst ist schreibgeschützt. Das bedeutet jedoch nicht, dass Sie die Werte seiner eigenen Eigenschaften wie Schriftart, Zeilenumbruchmodus usw. nicht ändern können.

79
123

So habe ich es mit Swift 4.2 herausgefunden.

counterButton.setTitle("Start Counter",
                      for:UIControl.State.normal)
0
raddevus