美文网首页
undo奔溃的问题

undo奔溃的问题

作者: 前年的邂逅_Jerry | 来源:发表于2021-07-15 19:56 被阅读0次

微信、boss等应用,输入框只要有限制文本长度,都会出现奔溃。

UITextFieldUITextView限制字符长度,输满输入框后,粘贴后再撤销奔溃。

复现步骤
0、粘贴板有粘贴的内容。
1、输入框文本输满。
2、该输入框键盘弹起。
3、三只手指选中同时点击键盘。
4、依次点击系统弹出的控件粘贴和撤销按钮。

解决办法:

/// 处理undo奔溃
class  InputLimit: NSObject{
    @objc static func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String, maxInputCnt: Int) -> Bool {
        return textInput(textField, shouldChangeCharactersIn: range, replacementString: string, maxInputCnt: maxInputCnt)
    }
    @objc static func textView(_ textView: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String, maxInputCnt: Int) -> Bool {
        return textInput(textView, shouldChangeCharactersIn: range, replacementString: string, maxInputCnt: maxInputCnt)
    }
    private static func textInput(_ textInput: UITextInput, shouldChangeCharactersIn range: NSRange, replacementString string: String, maxInputCnt: Int) -> Bool{
        guard let textRange = textInput.textRange(from: textInput.beginningOfDocument, to: textInput.endOfDocument) else{return false}
        let optionalText = textInput.text(in: textRange)
        guard let text = optionalText else { return true }
        let len = text.count + string.count - range.length
        if len <= maxInputCnt {
            if (string.isEmpty && range.length > 0 && text.count < range.location + range.length) {
                /// 这里可以判断为删除或者为撤销,
                /// text.count < range.location + range.length判断从中间删除
                let fillText = text.count > range.length ? String(text.dropLast(range.length)) : ""
                textInput.replace(textRange, withText: fillText)
                return false
            }
            return true
        }
        return false
    }
}

这里隐藏一个很深的bug,留言区留言我告诉你。

相关文章

  • undo奔溃的问题

    微信、boss等应用,输入框只要有限制文本长度,都会出现奔溃。 UITextField和UITextView限制字...

  • Xcode奔溃问题

    经常崩溃,一天开发下来崩溃数十次,无解试过删除xcuserdata,重装Xcode,都不起作用 电脑型号,以及系统...

  • UITextField奔溃问题

    项目在测试中遇到一个问题,当手机开启搜狗输入法点击textfield时软件会闪退,奔溃定位到了UIColor上。分...

  • iOS13 textfield的placeholder字体颜色崩

    由于iOS13禁止了textfield通过KVC获取私有属性,出现奔溃问题 奔溃报错Access to UITex...

  • GCD面试题

    1、并发队列 2、换成串行队列程序奔溃 3、对于问题2的简单表现形式,程序奔溃

  • DYLD, Library not loaded: /usr/l

    奔溃日志 奔溃表现:iOS12.1 及以下启动奔溃奔溃日志: 解决方法:关闭bitcode,重新打包上传appst...

  • iOS-千奇百怪的奔溃

    App 上线后,我们最怕的应该就是异常奔溃了。常见的奔溃类型分两种:信号可捕获奔溃、信号不可捕获奔溃,前者比较典型...

  • iOS 9.x assets 导致的奔溃问题

    问题描述:上周新上传的版本在Bug收集中发现有几个地方出现很多次奔溃问题,问题都集中在iOS 9.x中奔溃机型分布...

  • [__NSCFNumber length]奔溃问题

    最近遇到个线上问题,几百年没动过的模块出现了闪退现象,看了一个Crash log,都闪退在同一个问题上: 查看友盟...

  • 成年人的奔溃♥是从借钱开始

    成年人的奔溃是从借钱开始,其实如果说是借钱的人奔溃,那么被借钱的这个人更奔溃。让人借钱奔溃的不是借钱这件事,而是“...

网友评论

      本文标题:undo奔溃的问题

      本文链接:https://www.haomeiwen.com/subject/rlympltx.html