走进swift首页投稿(暂停使用,暂停投稿)编程学习

uitextview实现开头部分文本着色及不让更改的效果

2016-02-24  本文已影响714人  brzhang
效果图.png

实现思路

1、如何对部分文本着色

我们可以参考一下uitextview的这个属性

attributedText.png

利用这个属性,我们可以对特定range之内的文本做着色处理

let topicText = "世界你好"
let text: NSMutableAttributedString = NSMutableAttributedString.init(string: "#\(topicText)# ")
text.addAttribute(NSForegroundColorAttributeName, value: UIColor.init(red: 255 / 255, green: 23 / 255, blue: 33 / 255, alpha: 1), range: NSRange.init(location: 0, length: text.length - 1))
let textview = UITextView.init(frame: CGRectMake(0, 0, 200, 30))
textview.attributedText = text

2、我们在来考虑不允许开始的这部分文本删除的策略

这时候,我们需要用到UITextViewDelegate中的两个方法

shouldChangeTextInRange.png
这个方法中replacementText如果是空字符串 "",代表正在做删除操作,此时,如果如果能够找到已经删除到了开始的那部分,返回false的话,那么应该可以阻止开始部分文本被删除了。

3、我们在来考虑不允许开始的这部分文本增加的策略

那么是什么意思,举个🌰,你把焦点放在了,这段文本之中,在插入的话,实际上通过之前删除策略,我们无法保证文本内容的增加,因此,我们需要这个代理方法

textViewDidChangeSelection
那么思路又是什么呢?
首先,我们在初始化那段开始文本的时候,记录下我们的NSRange,那么很显然,这个range就是字符串的长度这个起始位置,然后偏移0,用代码表示就是
lastSelectRange = NSRange.init(location: textLength, length: 0)

然后,在我们的输入更多文本的过程中textview的NSRange是不停的变化的,我们要更新,然而,我们还不能直接更新,要判断下,这个新的range是否触摸到了我们那部分不能动的文本区域

if textView.selectedRange.location < textLength {
       textView.selectedRange = lastSelectRange
}
lastSelectRange = textview.selectRange

总结及提问环节

至此,我们就实现了对textview的开始部分文本的着色和不允许修改的功能。

那么问题来了:

以上问题的答案可以直接回复到评论中。。

上一篇下一篇

猜你喜欢

热点阅读