2016-12-21 7 views
-1

UITextFieldさんとUITextViewさんのテキストカラーを変更したいですが、できません。私はエラー:Cannot assign to immutable expression of type 'UIColor!!'を取得します。私が持っている別のエラーは、lineFragmentPaddingでパディングを変更しようとするとアプリがクラッシュするということです。 ):タイプ 'UIColor !!'の不変式に割り当てることができません。

マイコード:

override func viewDidLoad() { 
     super.viewDidLoad() 

[nameTxt, emailTxt, cityTxt, messageTxt].forEach { 
      ($0 as AnyObject).layer.borderWidth = 0.5; // works fine 
      ($0 as AnyObject).layer.cornerRadius = 6; // works fine 
      ($0 as AnyObject).layer.borderColor = UIColor(white: 0.2, alpha: 0.25).cgColor // works fine 
      ($0 as AnyObject).textColor = UIColor(white: 1, alpha: 0.25).cgColor // error here 
      ($0 as AnyObject).textContainer.lineFragmentPadding = 0 // Makes app crash 

     } 

} 

なぜ、どのように修正するには?

私はの、textColorがCGColorを取るとは思わないスウィフト3とXcode 8.2(8C38)

+0

どのように 'nameTxt、emailTxt、cityTxt、messageTxt'が宣言されていますか? –

+3

私はtextColorがCGColorを取るとは思わない。単に 'UIColor(white:1、alpha:0.25)'を使ってみましたか?また、クラッシュは何ですか? – Samantha

+2

配列の型が明らかに '[UITextField]'なので、なぜあなたはかなり不特定な 'AnyObject'にキャスト(非効率的に5回!)していますか? – vadian

答えて

1

で働いています。 UIColor(white: 1, alpha: 0.25)を使ってみましたか?

クラッシュまで:私は(スタックトレースを見ることなく)推測しています。なぜなら、UITextFieldにはプロパティーtextContainerがないためです。私はその行を呼び出す前にオブジェクトの型をチェックします。

if let textView = $0 as? UITextView { 
    textView.textContainer.lineFragmentPadding = 0 
} 
+0

ありがとうございますが、私はまだビューのテキストの色を変更することはできません。私は上記のすべてを試したが動作しない/: – user5195185

+1

@ user5195185このような{([AnyObject]として)[[nameTxt、emailTxt、emailTxt、cityTxt、messageTxt]のようにしてみてください)forEach { $ 0.layer.borderWidth = 0.5 $ 0 .layer.cornerRadius = 6; $ 0.layer.borderColor = UIColor(白:0.2、アルファベット:0.25).cgColor let textField = $ 0 as? UITextField { textField.textColor = UIColor(白:1、アルファ:0.25) } let textView = $ 0 as? UITextView { textView.textContainer.lineFragmentPadding = 0 } –

+0

Textviewキャスト内では、TextViewに固有のことを何でも行い、TextFieldにも同じことを適用します。 –

関連する問題