web-dev-qa-db-fra.com

Comment définir la couleur du texte de UILabel dans Swift

Lorsque j'essaie de définir la couleur d'un UILabel sur celle d'un autre UILabel à l'aide du code

myLabel.textColor = otherLabel.textColor

Cela ne change pas la couleur. Quand j'utilise ce code, cependant,

myLabel.textColor = UIColor.redColor()

Cela change la couleur correctement. Quel est le problème avec la première ligne?

59
kag359six

La solution de contournement la plus simple consiste à créer des étiquettes factices dans IB, donnez-leur le texte de la couleur que vous aimez et défini sur masqué. Vous pouvez ensuite référencer cette couleur dans votre code pour définir votre étiquette sur la couleur souhaitée.

yourLabel.textColor = hiddenLabel.textColor

La seule façon pour moi de changer la couleur du texte par programme était d'utiliser les couleurs standard, UIColor.white, UIColor.green...

47
Piet Grootnoten

Cet exemple de code ci-dessous illustre une configuration de base UILabel.

let lbl = UILabel(frame: CGRectMake(0, 0, 300, 200))
lbl.text = "yourString"

// Enum type, two variations:
lbl.textAlignment = NSTextAlignment.Right
lbl.textAlignment = .Right

lbl.textColor = UIColor.red
lbl.shadowColor = UIColor.black
lbl.font = UIFont(name: "HelveticaNeue", size: CGFloat(22))
self.view.addSubview(lbl)
42
Mayank Patel

Je ne sais pas pourquoi mais pour changer la couleur du texte des étiquettes, vous devez diviser la valeur souhaitée en 255, car cela ne fonctionne que jusqu'à la version 1.0.

Par exemple une couleur bleu foncé:

label.textColor = UIColor(red: 0.0, green: 0.004, blue: 0.502, alpha: 1.0)
24
loopidio

Création d'une application avec deux étiquettes dans IB et les suivantes:

@IBOutlet var label1: UILabel!
@IBOutlet var label2: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    label1.textColor = UIColor.redColor() // in Swift 3 it's UIColor.red
    label2.textColor = label1.textColor
}

la couleur de label2 a changé comme prévu, votre ligne fonctionne donc. Essayez println(otherLabel.textColor) juste avant de définir myLabel.textColor pour voir si la couleur correspond à vos attentes.

6
terrafirma9

solution pour Swift 3 -

let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
titleLabel.text = "change to red color"
titleLabel.textAlignment = .center
titleLabel.textColor = UIColor.red
4
Himanshu

Si vous utilisez Xcode 8 et Swift 3. Utilisez la méthode suivante pour obtenir le code UIColor.

label1.textColor = UIColor.red
label2.textColor = UIColor.black
3
Asfand Shabbir

Je pense que la plupart des gens veulent que leur texte fictif soit en gris et n'apparaisse qu'une fois. C'est ce que j'ai fait:

  1. Définissez votre couleur dans viewDidLoad() (pas dans IB)

    commentsTextView.textColor = UIColor.darkGray
    
  2. Implémentez UITextViewDelegate sur votre contrôleur

  3. ajouter une fonction à votre contrôleur

    func textViewDidBeginEditing(_ textView: UITextView) {
        if (commentsTextView.textColor == UIColor.darkGray) {
           commentsTextView.text = ""
           commentsTextView.textColor = UIColor.black
        }
    }
    

Cette solution est simple.

2
Frank

L'espace réservé au champ de texte et le libellé "est vraiment" sont difficiles à voir la nuit. Je change donc de couleur en fonction de l’heure de la journée.

Assurez-vous également de connecter le nouvel IBOutlet isReallyLabel. Pour ce faire, ouvrez Main.storybaord et maintenez la touche Ctrl enfoncée, faites glisser le contrôleur de vue "Convert" vers le champ de texte "is really", puis sélectionnez isReallyLabel sous Outlets.

AVERTISSEMENT: je n'ai pas testé pour voir si l'application est ouverte pendant la permutation de l'heure.

@IBOutlet var isReallyLabel: UILabel!   
  
override func viewWillAppear(animated: Bool) {
        let calendar = NSCalendar.currentCalendar()
        let hour = calendar.component(.Hour, fromDate: NSDate())
                
        let lightColor = UIColor.init(red: 0.961, green: 0.957, blue: 0945, alpha: 1)
        let darkColor = UIColor.init(red: 0.184, green: 0.184   , blue: 0.188, alpha: 1)

                
        switch hour {
        case 8...18:
                isReallyLabel.textColor = UIColor.blackColor()
                view.backgroundColor = lightColor
        default:
                let string = NSAttributedString(string: "Value", attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])
                textField.attributedPlaceholder = string
                isReallyLabel.textColor = UIColor.whiteColor()
                view.backgroundColor = darkColor
        }
}
0
Jeff

Pour modifier la couleur du texte de UILable à l'exécution, utilisez NSAttributedText et ne définissez pas UILable.textColor.

let font = UIFont(name: "SFProText-Semibold", size: 16)!
if let messageToDisplay = currentUser?.lastMessage {

    let attributedString = NSAttributedString(string: messageToDisplay, attributes: [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: UIColor(named: "charcoal")!])
    lastMessageLabel.attributedText = attributedString
} else {
    let attributedString = NSAttributedString(string: "Start a conversation", attributes: [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: UIColor(named: "ocean")!])
    lastMessageLabel.attributedText = attributedString
}

Remarque le charbon de bois et océan sont des couleurs définies dans Assets.xcassets. Images d'étiquette résultantes:

Resultant Label Images

Le code ci-dessus a bien fonctionné pour moi dans Xcode 10.2.1 et Swift 5.

0
Pankaj Kulkarni