关于输入框富文本实时输入字体颜色变化问题

关于输入框富文本实时输入字体颜色变化问题

项目开发中做聊天框架项目,使用自己开发的聊天键盘(表情,更多,输入框),而不使用第三方框架过程,会出现较多问题,目前在关于QQ那样的@弹窗,包含搜索,这里描述的是关于输入框中当选中需要@名字之后,名字变色,后接着输入的文字需要不受其影响

当我开发@弹窗过程中,根据需求实现@名字变色,通过富文本改,但是出现缺陷,就是接着输入的文字,或符号都是受到富文本影响变成了同样字体颜色,这个就比较苦恼,后面是找到一个解决方案:

  1. 在输入框实时输入的协议中设置输入框的一个属性 ,typingAttributes;
  2. 寻找另外的技术方案

因为是使用UITextView作为聊天输入框,所以在它的协议中方法实现设置属性


    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    
       
        // 发送键&回车键处理
        if (text == "\n") {
            if (isShowKeyboard) {
                isShowKeyboard = true
            }
            
           // sendChatMessage()
            return false
        }
       
       //避免@名字后的文字输入,字体颜色受富文本影响
        if NSMaxRange(range) == textView.textStorage.length {
            if textView.textStorage.length != 0 {

                let defaultColor = ZYColor.mainWhite_a(._90)!
                let defaultFont = ZYFont.pingFangHK_Regular_size(14)!

                var isOld = true

                textView.textStorage.enumerateAttributes(in: NSRange(location: textView.textStorage.length - 1, length: 1), options: NSAttributedString.EnumerationOptions.reverse) { atts, range, stop in
                    if atts.keys.count > 2{
                        isOld = false

                    }

                    let colorL = atts[.foregroundColor] as! UIColor
                    let fontL = atts[.font] as! UIFont
                    if colorL.isEqual(defaultColor) || fontL.isEqual(defaultFont){
                        isOld = false
                    }
                }
                if !isOld {
                    self.chatTextView.typingAttributes = [.foregroundColor: defaultColor,.font:defaultFont]
                }
            }
        }
        
//        let defaultColor = ZYColor.mainWhite_a(._90)!
//        let defaultFont = ZYFont.pingFangHK_Regular_size(14)!
//        self.chatTextView.typingAttributes = [.foregroundColor: defaultColor,.font:defaultFont]
        
        
       
        return true
    }

通过这个从而可以使后期输入的文字不受前面的富文本的影响改变颜色
后面发现在中间插入的时候没有触发进入里面设置属性,所以想到只需要设置typingAttributes即可,所以就直接去掉全面的代码,只保留三句代码

		let defaultColor = ZYColor.mainWhite_a(._90)!
      	let defaultFont = ZYFont.pingFangHK_Regular_size(14)!
      	self.chatTextView.typingAttributes = [.foregroundColor: defaultColor,.font:defaultFont]

这样就都可以设置,发现这样也可行,可惜在后面发现了另一个缺陷,在使用系统的九宫格键盘输入是,当选择@名字,接着在九宫格键盘快速点击某一个按键,发现文字受到富文本影响改变颜色了,所以后面就只能寻找另外的方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值