#質問したいこと
先ほどこちらのページにてtextViewで選択した部分の色を変える方法を教えてもらいました。
次に、そのtextViewで変えた色を違う画面のlabelにも反映させたいのですが、どうすればできるでしょうか?

↑textViewで色を変えたところ

↑違う画面にいったところでのlabelに表示されている文字
#コード
@IBAction func redColor(_ sender: UIButton) { typingColor = UIColor.red let range = eventText.selectedRange let string = NSMutableAttributedString(attributedString: eventText.attributedText) let attributes = [NSAttributedString.Key.foregroundColor: UIColor.red] string.addAttributes(attributes, range: eventText.selectedRange) eventText.attributedText = string eventText.selectedRange = range NSData as Data = try! NSKeyedArchiver.archivedData(withRootObject: typingColor, requiringSecureCoding: true) UserDefaults.standard.set(typingColor, forKey: "red") } @IBAction func blueColor(_ sender: UIButton) { typingColor = UIColor.blue let range = eventText.selectedRange let string = NSMutableAttributedString(attributedString: eventText.attributedText) let attributes = [NSAttributedString.Key.foregroundColor: UIColor.blue] string.addAttributes(attributes, range: eventText.selectedRange) eventText.attributedText = string eventText.selectedRange = range NSData as Data = try! NSKeyedArchiver.archivedData(withRootObject: typingColor, requiringSecureCoding: true) UserDefaults.standard.set(typingColor, forKey: "blue") }
どこに何をどのように書けばいいのかわからず、困っております。
ご教授よろしくお願いします。
「そのtextViewで変えた色を違う画面のlabelにも反映させたいのですが、どうすればできるでしょうか?」というのは、labelの色をtextViewで変更した色に変更したい(labelのテキストはtextViewとは無関係)ということでしょうか。
それとも、textView でテキストをドラッグし、反転させ色を変えた部分のテキストをコピーして、属性も反映させたいということでしょうか。
前者であれば、label.textColor = UIColor.色名 で変更できますが、質問者さんはどんな感じのコードで試されたのでしょうか。
上の写真でいきますと、「My birthday」という文字があり、そのうちMyが青色でbirthdayが赤色になっているのですが、ラベルは黒い文字のまま反映されてしまっています。
ラベルの文字もMy を青色にbirthdayを赤色にするにはどうすればいいでしょうか?
つまり、textView に表示させた文字列の属性をそのままlabelにも反映させたい、ということでしょうか。
あと、作られたコードも見せてもらえませんでしょうか。
TsukubaDepotさんがおっしゃっている通り、textView に表示させた文字列の属性をそのままlabelにも反映させたいです。
また、UserDefaults.standard.set(typingColor, forKey: "blue")というようにしてみてできるかなと思ったのですが、
'Attempt to insert non-property list object UIExtendedSRGBColorSpace 0 0 1 1 for key blue'
というエラーが出てしまい、どうすればいいか悩んでおります。
この選択した時に色を変える処理は質問のところにあるのだけです。
UserDefaults が出てくる、というのは遷移先の画面にあるラベルに反映させたい、ということでしょうか。
エラーメッセージをキーワード("Attempt to insert non-property list object"だけで)検索すると、このような例がでてきますので、一度型変換をおこなってみてはいかがでしょうか。
https://qiita.com/NatsumiShimamoto/items/1853007bdf8bdb2bfcf7
型変換のコードを書いてみたのですが、文法に誤りがあるらしく、
NSData as Data = try! NSKeyedArchiver.archivedData(withRootObject: typingColor, requiringSecureCoding: true)
と書いた時に、
Cannot assign to immutable expression of type 'Data'
というエラーが出てきてしまいます。
このエラーを調べてみたのですが、どのように直せばいいのか分からず困っております。
このエラーをどうしたら直せるかとそもそもこの方法でいいのかというところを教えていただけませんでしょうか?
昨日は
> また、UserDefaults.standard.set(typingColor, forKey: "blue")というようにしてみてできるかなと思ったのですが、
> 'Attempt to insert non-property list object UIExtendedSRGBColorSpace 0 0 1 1 for key blue'
というエラーが出てしまい、どうすればいいか悩んでおります。
というお話でしたが、今日は
> NSData as Data = try! NSKeyedArchiver.archivedData(withRootObject: typingColor, requiringSecureCoding: true)
> と書いた時に、
> Cannot assign to immutable expression of type 'Data'
> というエラーが出てきてしまいます。
と異なった話になってしまっています。
断片的な情報では何も提案できませんので、保存の前後含めてコードを提示してもらえないでしょうか。
> このエラーをどうしたら直せるかとそもそもこの方法でいいのかというところを教えていただけませんでしょうか?
UserDefault やそれに類似した方法で一時的に記録し、それを遷移先のクラスで読み込むのもひとつですが、データの型などを気にしなくて済むのは、遷移先のクラスのプロパティ(変数)に直接書き込むことだと思います。
昨日は、
UserDefaults.standard.set(typingColor, forKey: "blue")
というようにして見れば、違う画面でもその部分の色が反映されるかなと思ったのですが、
Attempt to insert non-property list object UIExtendedSRGBColorSpace 0 0 1 1 for key blue
というエラーが出てきてしまいました。そこで、アドバイスを元に型変換(nsdata -> data)をしてみたのですが、
Cannot assign to immutable expression of type 'Data'
というようなエラーになってしまっています。
最初はビルドはできたのですが、現在は上記のようなエラーが出てきてしまっていてビルドができない状況です。保存をしているのは質問のところに書いてあるものだけです。
もろもろの状況が把握できました。
UserDefaultは何でもかんでも保存できるわけではなく、保存できる型は限られいます。
ある特定の型以外はシリアライズに関連する処理を施した上で保存する必要がありますが、今回の処理を考えるとその処理もやや大袈裟な気がします。
参考: https://teratail.com/questions/124978
行いたいことは、遷移した先の画面に置かれているテキストの色を変えたい、ということですよね?
そうであれば、遷移する処理を行う際に遷移先のテキストの色を変えるのが楽ですし、今後ほかの処理でも応用が効くと思いますが、いかがでしょうか。
それであれば簡単なサンプルはかけますので(というか、もう書いています)、その旨を教えてください。
ご迷惑をおかけして申し訳ありません。
サンプルも書いてくださっているということで、本当にとても助かります。
行いたいことは、TsukubaDepotさんが仰っている通り、遷移した先の画面に置かれているテキストの色を変えたいということです。
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー