星空网 > 软件开发 > 操作系统

根据键盘调整textField(多个)位置使其不会被键盘挡住

当一个界面上有个textField时,键盘出现时需要保证textField不会被键盘挡住。
一般的做法是,监听 UIKeyboardWillShowNotification和 UIKeyboardWillHideNotification,在通知的selector方法中通过notification.userInfo获取键盘的相关信息,然后调整界面的位置。
 
但是当界面上有两个以上的textField时,问题来了:在textField之间切换的时候UIKeyboardWillShowNotification这个通知不一定会发!
据观察,只有当键盘的大小发生变化的时候,系统才会再次发出UIKeyboardWillShowNotification通知。。。
例如数字键盘变到英文键盘,键盘大小不变,所以不会发通知,
英文键盘变到中文键盘,键盘大小改变,所以会再发一次willShow通知,其他类似
 
所以问题是:界面上有多个textField,有的被挡住了,有的没有被挡住,想要在切换textField的时候每次都可以把目标textField移动到不被挡住的位置,怎么办?(最常见的,登陆界面有账号,密码两个textField,两个都输入的时候分别要移动到合适的位置)
 
- (void)textFieldDidBeginEditing:(UITextField *)textField的时候调整位置?
如果这时候键盘还没出现,那这个方法的调用是在系统发UIKeyboardWillShowNotification通知之前的
如果键盘已经出现,那系统可能不会再发UIKeyboardWillShowNotification通知,这时候你不一定知道键盘的大小,(而且问题是系统不一定发,如果是一定不发,那还好处理一点)
如果记录下来第一次键盘出现时键盘的大小,切换textField的时候依然用这个保存的大小,那调整的位置可能不准。。。
如果针对这一个viewController来写死某些数值的话,那适配3.5寸或者4寸或者4.7寸或者5.5寸屏幕的时候,又该出问题了
 
这个问题困扰了我很久,后来研究了github上大神的代码,才找到比较理想的解决方案,
大神的第三方库:
TPKeyboardAvoiding
IQKeyboardManager
这两个库都很好的解决了上述问题,但TPKeyboardAvoiding用起来稍微有点麻烦,需要继承,
IQKeyboardManager功能很强大,但是相对也就比较复杂,我是没看懂怎么用(惭愧)。。。
 
所以我就自己写了一个库,基本也解决了上述的问题,功能也相对简单,用起来也相对简单。
demo地址:https://github.com/Phelthas/LXMKeyboardManager
 
核心思路是:
1,用一个单独的类来保存keyboard的相关状态
2,把textField调整到屏幕可视范围内的适当位置,而不是紧贴着键盘(参考TPKeyboardAvoiding的思路)
3,用一个isKeyboardShow的属性来记录键盘是否已经出现,然后根据这个状态来做出不同的调整
4,键盘通知的selector里只需处理isKeyboardShow的状态
 
效果如图:
根据键盘调整textField(多个)位置使其不会被键盘挡住images/loading.gif' data-original="data:image/gif;base64,R0lGODlhQAFOAncAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQADwAAACwAAAAAQAFOAocAAAALCwsfAAATExMcHBwAADEAADsxAAAjIyMqKio1NTU7OzsAAE0AAFwALmc6HVQASnhMAABMHwByOgBFRUVKSkpTU1NcXFxkZGRra2t0dHR7e3s4a5NBa5ZZcJJJfqkEgpYEgpoDhaU7gpYulK8AgP8Wif8biv8jjf83lv87mf9DgpZMgpZfg6VTnK9fpbhhgpZjk7VBm/9In/9MoP9ap/9cqP9krP9orv9ssP9wsv97uf6VbDWddz+AU0Ghf1eoiVegjH6ynH2Dg4ONjY2FjpWUlJSbm5uGtL6YpKSTtL+7q5OioqKnq66tra2qvr60qaK7tq+ysrKysr60vr6+srK+urO9vb2Kv/2yssSyscmyvseysdKysdmyvtWyvdqMwf2Qw/yZx/ydyfyxw86+x8qxxNOxw9uxytexytu+xdW+ytK90NulzPyoz/ys0Pyxy+Gx0uWx1ui90uO91ei92Omz1Py82PrDsrLJsrLTsrLTvrHZvrHDssPHvsfNvs3DvtHQvsfTxLHQx77WyrHUyr3bxLHcyrHZzL3c0L3hy7Di0LDk0r3q17Dp2L3ExMTDw83HysrKx8PLy8vDx9LDzdvF0t/K0NbK1N7N2tzUx8PUzcfczcPQx9Lc0cTe1MnR0dHR1NvU2NTS2NrY1dDa2tLZ2dnH1OLC1ujC2OrK1uHN2OHK3OvD3frQ2+TS3era3uHO4O7L4frW4ObT4u3Y4eXb5OzT5fDW6fHa5/Hc6vPa6Prh08Xh1Mrj2s3q2sTq3Mrj2tDs4M/m4NXk4Nrq4dTs5dzx59Tz6dbz6trl5eXh5+rj6uzt5+Ds6uPr6+vj7PLi7Pjs7fDm8vXr8/Xs8vjy7eTx7ur28eX18+r19fXw8/j9/f0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI/wBNmeKmraDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatw4kRuoZxxDihxJsqTJkyhTapyksqXLlzBjypzpkGVDZaZAgTKlLCJOnTx95tzZk6bRo0iTtnzE8FlOgQJ3gmz6FKrUhk53WjU1dWG2TtQKNhskRQoZWweDVZEyBVNYhNc2ld2CVtvXtxV50WIobeRdbb0iPRp8CZq2ZIDwkswG1VTdi7xuARZM2LA2TrpQEmus+CLThQKV4eQ5umHo0aIFmiZ9WjXDbH2maSsmxYxoQVJYFWQkxZWyYFLgIMyWR0stZYWkSIYt26IhOguxSWnOkbk2Q1JGmSJVZco0ZFmok/9EJiXSJEmvMhqqcz379u6y+eA6SbzMpEmUOlv8nFAZqNGN+VdUf/81Ftp/CwloIE8IOkScF3gZogU12egRh0G/eHdQMlJkZpcewmlkSCpe9aEfR4acYRCHtCSTxYkc/aLiSCmuKMVe8p3kIoyegcbTgqUpFBqQriU0pIFBKpTNH9Qc0+GGNxIXojbWhKIYebkYVEx6S1KTDCSllLXKMGVVEhYwpxSUTSCGjUhlclKs4eVaUnD5SVlrGIYYMXiQ+FCX181oVx6oJDOFKGuZWVAxeEihRV3ArJJIWelRidsUeyGkCHsI9VKWGZZB
 
现在可以支持scrollView,tableView,collectionView或者cell上的textField,其他有需要可以再加
如果有什么bug,欢迎指出,大家一起讨论 



原标题:根据键盘调整textField(多个)位置使其不会被键盘挡住

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

卖家注意!eBay运营中这些评价可移除!:https://www.ikjzd.com/articles/94245
扬帆出海!京东强势入驻这三个国家!:https://www.ikjzd.com/articles/94246
亚马逊卖家APP上线啦!这样一来方便多了!:https://www.ikjzd.com/articles/94247
eBay这个设置,让卖家销售几率变7倍!:https://www.ikjzd.com/articles/94248
操作直通车之前,务必了解这些规则!:https://www.ikjzd.com/articles/94255
电放提单详解,其与海运单到底有什么区别?:https://www.ikjzd.com/articles/94257
跨境支付百科——巴西支付篇:https://www.kjdsnews.com/a/1836648.html
大福地快捷酒店预订 大福酒店怎么走:https://www.vstour.cn/a/365187.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流