Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将属性化字符串附加到UITextField的属性化文本,并保留所有属性';s以前的颜色和属性_Ios_Swift_Nsattributedstring - Fatal编程技术网

Ios 将属性化字符串附加到UITextField的属性化文本,并保留所有属性';s以前的颜色和属性

Ios 将属性化字符串附加到UITextField的属性化文本,并保留所有属性';s以前的颜色和属性,ios,swift,nsattributedstring,Ios,Swift,Nsattributedstring,我在Swift中使用属性字符串。我的问题是如何将属性字符串附加到UITextField的属性文本中,并保留它以前的所有颜色和属性。当我附加新的属性字符串时,UITextField中所有以前的文本都变为黑色,我不想这样,我想保留它以前的彩色部分。这是迄今为止的代码: var newMutableString = NSMutableAttributedString() if let completionTextHolderText = completionTextHolderText {

我在Swift中使用属性字符串。我的问题是如何将属性字符串附加到UITextField的属性文本中,并保留它以前的所有颜色和属性。当我附加新的属性字符串时,UITextField中所有以前的文本都变为黑色,我不想这样,我想保留它以前的彩色部分。这是迄今为止的代码:

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文本。这是一个问题。