我正在为选定的文本应用自定义属性,效果很好,但是当我在已应用的属性文本中修改文本时,新输入的文本没有自定义属性。如果这是标准行为,那么我该怎么做才能实现我想要的行为。
我在做什么:
日志输出
这是示例文本{ MyCustomAttributeKey = CustomAttributeValue; NSFont =“ font-family:\”。SFUIText \“; font-weight:常规; font-style:常规; font-size:14.00pt”; NSParagraphStyle =“路线4,LineSpacing 0,ParagraphSpacing 0,ParagraphSpacingBefore 0,HeadIndent 0,TailIndent 0, FirstLineHeadIndent 0,LineHeight 0/0,LineHeightMultiple 0, LineBreakMode 0,制表符(\ n 28L,\ n 56L,\ n 84L,\ n 112L,\ n
140L,\ n 168L,\ n 196L,\ n 224L,\ n 252L,\ n 280L,\ n
308L,\ n 336L \ n),DefaultTabInterval 0,块(\ n),列表(\ n), BaseWritingDirection 0,断字因子0,TighteningForTruncation 不,HeaderLevel 0“;}
现在我正在获取日志输出(日志经过格式化以更加清晰)
这是{MyCustomAttributeKey = CustomAttributeValue; NSFont =“ 字体家族:\“。SFUIText \”; font-weight:正常;字体样式:正常; font-size:14.00pt“; NSParagraphStyle =” Alignment 4,LineSpacing 0, ParagraphSpacing 0,ParagraphSpacingBefore 0,HeadIndent 0,TailIndent 0,FirstLineHeadIndent 0,LineHeight 0/0,LineHeightMultiple 0, LineBreakMode 0,制表符(\ n 28L,\ n 56L,\ n 84L,\ n 112L,\ n 140L,\ n 168L,\ n 196L,\ n 224L,\ n 252L,\ n 280L,\ n 308L,\ n 336L \ n),DefaultTabInterval 0, 块(\ n),列表(\ n),BaseWritingDirection 0,HyphenationFactor 0, TighteningForTruncation NO,HeaderLevel 0“;}
修改后的{NSFont =“ font-family:\”。SFUIText \“; font-weight:正常; 字体样式:正常; font-size:14.00pt“; NSParagraphStyle =” Alignment 4,LineSpacing 0,ParagraphSpacing 0,ParagraphSpacingBefore 0, HeadIndent 0,TailIndent 0,FirstLineHeadIndent 0,LineHeight 0/0, LineHeightMultiple 0,LineBreakMode 0,制表符(\ n 28L,\ n 56L,\ n 84L,\ n 112L,\ n 140L,\ n 168L,\ n 196L,\ n 224L,\ n 252L,\ n 280L,\ n 308L,\ n 336L \ n),DefaultTabInterval 0,块(\ n),列表(\ n), BaseWritingDirection 0,断字因子0,TighteningForTruncation 不,HeaderLevel 0“;}
示例文本{MyCustomAttributeKey = CustomAttributeValue; NSFont =“ 字体家族:\“。SFUIText \”; font-weight:正常;字体样式:正常; font-size:14.00pt“; NSParagraphStyle =” Alignment 4,LineSpacing 0, ParagraphSpacing 0,ParagraphSpacingBefore 0,HeadIndent 0,TailIndent 0,FirstLineHeadIndent 0,LineHeight 0/0,LineHeightMultiple 0, LineBreakMode 0,制表符(\ n 28L,\ n 56L,\ n 84L,\ n 112L,\ n 140L,\ n 168L,\ n 196L,\ n 224L,\ n 252L,\ n 280L,\ n 308L,\ n 336L \ n),DefaultTabInterval 0, 块(\ n),列表(\ n),BaseWritingDirection 0,HyphenationFactor 0, TighteningForTruncation NO,HeaderLevel 0“;}
我的预期输出是将自定义属性应用于新输入的文本,但事实并非如此。如何实现呢?
谢谢。
我的ViewController和代码:
// ViewController.swift
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
let customAttributeStringKey: NSAttributedStringKey = NSAttributedStringKey.init(rawValue: "MyCustomAttributeKey")
@IBOutlet weak var textV: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func applyCustomAttribute(_ sender: Any) {
let attributedString : NSMutableAttributedString = textV.attributedText.mutableCopy() as! NSMutableAttributedString
attributedString.addAttribute(customAttributeStringKey, value: "CustomAttributeValue", range:textV.selectedRange)
textV.attributedText = attributedString
}
@IBAction func logAttribute(_ sender: Any) {
print(textV.attributedText.description)
}
}
P.S。 :使用NSAttributedStringKey.underlineStyle(而不是自定义属性)进行了实验,
attributedString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range:textV.selectedRange)
在这种情况下,修改后的文本也会获得underlineStyle属性,那么customAttribute有什么问题?
编辑:进度
我尝试在textview侦听器方法中设置键入属性,如下所示,这部分可行...但是有一个
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if(isApplyAttributesClicked){ //this flag is true when we have applied attributes by clicking Apply attribute button
textV.typingAttributes = [customAttributeStringKey.rawValue:"CustomAttributeValue"]
}
return true
}
但是现在的问题是,每当从键盘上选择预测或自动更正时,下一个键入单词的键入属性就没有自定义属性。 任何帮助将不胜感激。