Frage Benutzerdefiniertes UIControl mit UILabel, das auf Farbtonänderung abdunkelt


Im Falle von UISegmentedControl wird das Control nach einem Popover oder einer Warnung grau abgeblendet (entsättigt die Tönungsfarbe)

Ich baue meine eigene UIControl-Unterklasse, die ein UILabel als Subview verwendet

Ich möchte die Textfarbe des UILabel auf dieselbe Weise abblenden (entsättigen), wie durch UISegmentedControl oder (UIButton ...)


5
2018-01-09 11:26


Ursprung


Antworten:


Schaue auf die tintColor und tintAdjustmentMode Eigenschaften auf UIView (verfügbar seit iOS 7) und der tintColorDidChange Methode.

Wenn Sie sie in Ihrer benutzerdefinierten Ansicht überschreiben, können Sie darauf reagieren, dass sie abgeblendet sind.

Als die iOS 7 UI-Übergangshandbuch sagt:

Wenn eine Warnmeldung oder ein Aktionsblatt angezeigt wird, blendet iOS 7 die Tönungsfarbe der dahinter liegenden Ansichten automatisch ab. Um auf diese Farbänderung zu reagieren, wird eine benutzerdefinierte Ansichtsunterklasse verwendet tintColor in seiner Wiedergabe sollte überschreiben tintColorDidChange um das Rendering bei Bedarf zu aktualisieren.

Die Lösung könnte folgendermaßen aussehen:

- (void)tintColorDidChange {

    self.titleLabel.textColor = self.tintColor;

}

10
2018-01-09 11:31



Während die akzeptierte Antwort mir half, war das Ergebnis, dass die abgeblendete Farbe auf meine Steuerung angewendet wurde, selbst wenn der Bildschirm nicht gedimmt wurde. Ich habe das folgendermaßen korrigiert:

override func tintColorDidChange() {
    switch tintAdjustmentMode {
    case .Dimmed:
        myLabel.textColor = UIColor.grayColor()
    default:
        myLabel.textColor = UIColor.blueColor()
    }
}

Dadurch wird dem Steuerelement nur dann eine graue Farbe zugewiesen, wenn der Bildschirm abgeblendet ist.


2
2017-12-02 12:27