2016-04-11 16 views
4

iOSアプリケーションにグローバルな色を変更しようとしています。私は、UILabel.appearance().textColorへの変更がUITextFieldプレースホルダテキストに伝播する問題にぶつかっています。私がこの問題のために見た解決策は、属性文字列を設定するか、UITextFieldのプライベートメンバーを掘り下げることです。 UILabelのテキストカラーの色やテキストフィールドのプレースホルダテキストをグローバルに変更するにはどうすればよいですか?私は下のコードを試しましたが、私はすべての緑のテキストで終わります。UILabelのテキストの色の変更が、プレースホルダのテキストを変更しないようにする

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

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

UILabelのテキストの色とUITextFieldのテキストの色のみを変更したいですか? UITextFieldのテキストの色と他のすべての色は同じにする必要がありますか? – HardikDG

+0

@Pyroお互いに独立した2つのコントロールを変更したい –

答えて

1

UIAppearanceを使用してプレースホルダテキストの色を指定する方法はありません。 (そのような方法で宣言されたプロパティはUI_APPEARANCE_SELECTORです。)最も安全なオプションは、UITextFieldサブクラスを使用することです。 Interface Builderで色を管理しやすくする方法を紹介します。

@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) 
      } 
     } 
    } 
} 

あなたがコードでの色の変化をやっている場合は、NSUserDefaultsの設定からplaceholderColorを割り当てることUIAppearanceベースの管理を合理的にスムーズに収まるでしょう。

+0

これは、私の述べた問題に対する非常に素晴らしい解決策です。私はストーリーボードの設定オプションが好きです。 –