2016-04-11 36 views
4

Bir iOS uygulamasında global renk değişiklikleri yapmaya çalışıyorum. UILabel.appearance().textColor'daki değişikliklerin UITextField yer tutucu metne yayıldığı bir sorunla karşılaşıyorum. Bu sorun için gördüğüm çözümler, ilişkilendirilmiş dizeleri ayarlama veya UITextField özel üyelerine kazma içerir. UILabel metin renginin rengini ve metin alanındaki yer tutucu metnini global olarak nasıl değiştirebilirim? Aşağıdaki kodu denedim, ancak tüm yeşil metinle sonuçlandım.UILabel metin rengini değiştirmeyi önleme Yer tutucu metin rengini değiştirmek hızlıca değiştir

UILabel.appearance().textColor = UIColor.greenColor() 

// UITextField placeholder color 
UILabel.appearanceWhenContainedInInstancesOfClasses([UITextField.self]).textColor = UIColor.cyanColor() 
+0

Bu yüzden UILabel metin rengi ve UITextField metin rengini değiştirmek mi istiyorsunuz? UITextField metin rengi ve diğer tüm renkler aynı olmalıdır? – HardikDG

+0

@Pyro İki blogu birbirinden bağımsız olarak değiştirmek istiyorum –

cevap

1

UIAppearance kullanarak yer tutucu metin rengini belirtmenin bir yolu yoktur. (Sadece UI_APPEARANCE_SELECTOR ile bildirilen özellikler kullanılabilir.) En güvenli seçeneğiniz bir UITextField alt sınıfı kullanmaktır; Burada, Interface Builder'da renk yönetilebilir hale getirmek için bir tane var.

@IBDesignable class PCTextField: UITextField { 
    @IBInspectable var placeholderColor: UIColor = UIColor.redColor() { 
     didSet { 
      if let placeholder = self.placeholder { 
       let colorAttribute = [NSForegroundColorAttributeName: placeholderColor] 
       attributedPlaceholder = NSAttributedString(string: placeholder, attributes: colorAttribute) 
      } 
     } 
    } 
} 

sonra UIAppearance tabanlı yönetim ile makul sorunsuz uyabilecek bir NSUserDefaults ayarından placeholderColor atama kodda renk değişiklikleri yapıyorsanız.

+0

Bu, benim sorunum için çok güzel bir çözüm. Storyboard yapılandırma seçeneklerini beğeniyorum. –