ストーリーボードで設定したアトリビュートを残してUILabelの文字列のみを変更したい
https://stackoverflow.com/a/42166899/1979953
と
https://stackoverflow.com/a/38297423/1979953
を参考に
extension UILabel {
func replaceAttributedText(string: String) {
if let originalAttributedText = self.attributedText {
let attributes = originalAttributedText.attributes(at: 0, effectiveRange: nil)
self.attributedText = NSAttributedString(string: string, attributes: attributes)
}
}
}
を作ってみたのですが、空文字
を与えた後で
Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds'
になります。
つまり
self.hogeLabel.replaceAttributedText(string: "hoge")
self.hogeLabel.replaceAttributedText(string: "")
self.hogeLabel.replaceAttributedText(string: "aaa") // 空文字を与えてしまった後なのでエラー
このようなコードでエラーが発生します。
空文字
を与えたことによってアトリビュート情報が吹っ飛んでしまったせいなのかと推測しているのですが、うまく文字列だけ入れ替える方法はないのでしょうか?
(空文字
ではなくて、スペースなどの空白文字
を入れるとうまくいくのですが、空文字
を入れたいです)