Ios 将属性化字符串附加到UITextField的属性化文本,并保留所有属性';s以前的颜色和属性
我在Swift中使用属性字符串。我的问题是如何将属性字符串附加到UITextField的属性文本中,并保留它以前的所有颜色和属性。当我附加新的属性字符串时,UITextField中所有以前的文本都变为黑色,我不想这样,我想保留它以前的彩色部分。这是迄今为止的代码:Ios 将属性化字符串附加到UITextField的属性化文本,并保留所有属性';s以前的颜色和属性,ios,swift,nsattributedstring,Ios,Swift,Nsattributedstring,我在Swift中使用属性字符串。我的问题是如何将属性字符串附加到UITextField的属性文本中,并保留它以前的所有颜色和属性。当我附加新的属性字符串时,UITextField中所有以前的文本都变为黑色,我不想这样,我想保留它以前的彩色部分。这是迄今为止的代码: var newMutableString = NSMutableAttributedString() if let completionTextHolderText = completionTextHolderText {
var newMutableString = NSMutableAttributedString()
if let completionTextHolderText = completionTextHolderText {
newMutableString = userTextField.attributedText?.mutableCopy() as! NSMutableAttributedString
let choosenSuggestion = createAttributed(string: completionTextHolderText, with: .blue)
newMutableString.append(choosenSuggestion)
let emptySpace = createAttributed(string: " ", with: .black)
newMutableString.append(emptySpace)
}
userTextField.attributedText = newMutableString.copy() as? NSAttributedString
//-------
private func createAttributed(string: String, with color: UIColor) -> NSMutableAttributedString {
let attributedString = NSMutableAttributedString(string: string, attributes: [:])
attributedString.addAttribute(NSForegroundColorAttributeName,
value: color,
range: NSRange(location: 0, length: string.characters.count))
return attributedString
}
谢谢你的帮助。我现在已经让你的代码工作了。我认为在主节之前或之后会发生一些事情,并重置范围的属性颜色 下面是一些如何重构它的想法:
@IBAction func buttonClick(_ sender: UIButton) {
if let completionTextHolderText = completionTextHolderText,
let attrStr = userTextField.attributedText {
let newMutableString = attrStr.mutableCopy() as! NSMutableAttributedString
newMutableString.append(
createAttributed(string: completionTextHolderText+" ", with: .blue)
)
userTextField.attributedText = newMutableString
}
}
private func createAttributed(string: String, with color: UIColor) -> NSAttributedString {
return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName : color])
}
我现在让你的代码工作了。我认为在主节之前或之后会发生一些事情,并重置范围的属性颜色 下面是一些如何重构它的想法:
@IBAction func buttonClick(_ sender: UIButton) {
if let completionTextHolderText = completionTextHolderText,
let attrStr = userTextField.attributedText {
let newMutableString = attrStr.mutableCopy() as! NSMutableAttributedString
newMutableString.append(
createAttributed(string: completionTextHolderText+" ", with: .blue)
)
userTextField.attributedText = newMutableString
}
}
private func createAttributed(string: String, with color: UIColor) -> NSAttributedString {
return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName : color])
}
简单地说,它应该是有效的。但是,当此代码停止时,userTextField.attributedText有哪些属性?createAttributed()方法有哪些功能?@AlexShubin-我已经编辑了我的问题并添加了
createAttributed()
函数userTextField.AttributeText
可能包含一些蓝色或黑色文本。只有属性是NSForegroundColorAttributeName
。例如,黑色单词,黑色单词,蓝色单词,黑色单词,蓝色单词。。。等等。顺序不重要。我现在让你的代码工作。我认为在你的主要部分和重置范围属性颜色之后会发生一些事情。请为main Section发布更多代码。此外,您使用“复制”“可变”“类型转换”等工具使事情变得太复杂,无需到处都是。例如,您的createAttributed()可能应该返回NSAttributedString,并且在一行中可能如下所示:返回NSAttributedString(string:string,attributes:[NSForegroundColorAttributeName:color])@非常感谢。我会对它进行更多的测试,看看我的问题出在哪里。这不是我粘贴的重构代码,我已经尝试了更多的方法来实现这一点。我不会让它像现在复制的问题一样。简单地说,它应该可以工作。但是当这段代码运行时,userTextField.AttributeText有哪些属性,以及什么createAttributed()方法有吗?@AlexShubin-我已经编辑了我的问题并添加了createAttributed()
函数。userTextField.AttributeText
可以包含一些蓝色或黑色文本。只有属性是NSForegroundColorAttributeName
。例如,黑色单词、黑色单词、蓝色单词、黑色单词、蓝色单词……等等。顺序不重要。我现在让你的代码工作起来了。我想是这样的在你的主要部分之后会进行重新设置,并重置范围的属性颜色。请为主要部分发布更多代码。此外,你使用“复制”“可变”“类型转换”等东西使事情变得太复杂,到处都不需要,例如你的createAttributed()可能应该返回NSAttributedString,并且在一行中可能如下所示:返回NSAttributedString(string:string,attributes:[NSForegroundColorAttributeName:color])@非常感谢。我会对它进行更多的测试,看看我的问题出在哪里。这不是我粘贴的重构代码,我已经尝试了更多的方法来实现这一点。我不会让它像现在被复制一样存在问题。是的,在这段代码之前,我正在更改UITextField的文本。这是一个问题。是的,在这段代码之前,我正在更改UITextField的g文本。这是一个问题。