iOS开发 iPad键盘撤销操作的注意点

文章讨论了在iOS设备上,尤其是TextField和TextView中,使用撤销键时遇到的数组越界问题,源于输入长度限制和撤销信息数组不匹配。提供了针对TextView和TextField的自定义shouldChangeTextInRange和shouldChangeCharactersInRange方法作为解决方案,并提醒处理表情字符长度计算。
摘要由CSDN通过智能技术生成

键盘的撤销按键是iPad独有的一个按键,在手机端是不存在这个按键的,但是手机端同样也存在撤销操作,只不过并不是通过键盘上的按键来进行撤销操作的。
######问题
当对TextView或者是TextField添加了限制输入长度。然后在控件中输入到最长长度,这时候继续去输入东西,但是从界面上来看我们输入的东西是没有显示出来的。此时按一下键盘上的撤销按键
undo.png
此时就会出现数组越界的崩溃问题。
当出现数组越界这个问题的时候其实我们很容易就能想到原因是什么的。就是虽然我们限制了输入的长度,但实际上在存储撤销信息的数组中仍然还在继续的输入东西。但是实际上控件中却并没有相应的信息(或者说是长度与数组的长度不符)。这个问题最容易出现在TextField,因为原生的控件中并没有实现实时的输入信息,所以通常我们会添加一个监听来实现很少去调用TextFieldDelegate。所以这个问题也就很容易忽略掉了。
######解决方案
TextView

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        let existedLength = textView.text?.count ?? 0
        let selectedLength = range.length
        let replaceLength = text.count
        let pointLength = existedLength - selectedLength + replaceLength
        if pointLength > 最大长度{
            return false
        }
        return true
    }

TextField

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let existedLength = textField.text?.count ?? 0
        let selectedLength = range.length
        let replaceLength = string.count
        let pointLength = existedLength - selectedLength + replaceLength
        if pointLength > 最大长度 {
            return false
        }
        return true
    }

具体的内部细节问题还是要大家共同去探索学习,这里只提供了一下解决方案
######一点点延伸
当我们在输入键盘自带的表情的时候一定是要去注意一下的。因为他的长度是2,我们正常输入数字、字母、汉字等等可以看做是1,所以如果输入框里面带有表情一定要注意判断长度。

检测是否有表情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值