打字时TextView中的AttributedText [重复]
Posted
技术标签:
【中文标题】打字时TextView中的AttributedText [重复]【英文标题】:AttributedText in TextView while typing [duplicate] 【发布时间】:2016-04-29 22:38:00 【问题描述】:我有一个 textView,我试图给它一个属性文本。我尝试在 shouldChangeTextInRange
内实现它,但它因超出索引范围而崩溃。
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool
if myTextView
textView.attributedText = addAttributedText(1, text: text, fontsize: 13)
let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
let numberOfChars = newText.characters.count
return numberOfChars < 20
return true
func addAttributedText(spacing:CGFloat, text:String, fontsize: CGFloat) -> NSMutableAttributedString
let attributedString = NSMutableAttributedString(string: text, attributes: [NSFontAttributeName:UIFont(
name: "Font",
size: fontsize)!])
attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSMakeRange(0, text.characters.count))
return attributedString
我尝试将带有空文本的属性字符串添加到 viewDidLoad 中的 textView,但这没有帮助。这就是为什么我认为在shouldChangeTextInRange
上这样做是合适的
(请注意我的addAttributedText
方法非常适用于其他文本视图)
如果我使用它,在一个字符输入中,它会写入 2x 并崩溃。处理将 textView 的文本转换为正在键入的属性文本的正确方法是什么。
【问题讨论】:
你看过这里吗? ***.com/questions/16716525/… @EugeneZhenyaGordin 不幸的是,这种类型的objective-c 对我来说似乎很困惑,因为我没有任何先验知识。你能帮忙吗? 【参考方案1】:这是我尝试从上面的链接转换的代码,它可能有错误,但我希望它能够帮助你。
func formatTextInTextView(textView: UITextView)
textView.scrollEnabled = false
var selectedRange: NSRange = textView.selectedRange
var text: String = textView.text!
// This will give me an attributedString with the base text-style
var attributedString: NSMutableAttributedString = NSMutableAttributedString(string: text)
var error: NSError? = nil
var regex: NSRegularExpression = NSRegularExpression.regularExpressionWithPattern("#(\\w+)", options: 0, error: error!)
var matches: [AnyObject] = regex.matchesInString(text, options: 0, range: NSMakeRange(0, text.length))
for match: NSTextCheckingResult in matches
var matchRange: NSRange = match.rangeAtIndex(0)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: matchRange)
textView.attributedText = attributedString
textView.selectedRange = selectedRange
textView.scrollEnabled = true
编辑:在原始帖子中没有看到 Swift 的答案,这是链接:***.com/a/35842523/1226963
【讨论】:
这里有一个 swift 版本:***.com/a/35842523/4705339 完美运行 太棒了!!!很高兴它有帮助! @EugeneZhenyaGordin 这个答案抄袭自***.com/a/35842523/1226963,没有署名。请勿将其他人的答案作为您自己的答案发布。 首先,我发布了它的链接。 senty 问我是否可以转换它,我确实使用了这个链接:objectivec2swift.com/#/converter/code。 senty 实际上找到了您稍后提到的 swift 版本,它在 cmets 中。我是否有罪,我的答案被标记为答案? 我可以添加对这个帖子的引用没问题以上是关于打字时TextView中的AttributedText [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当 TextView 是匹配约束时,如何对齐 TextView 中的文本?
滚动时textView在viewController中的位置
如何在单击 TextView 中的文本链接时打开浏览器 [重复]