实现更安全、高扩展的自定义键盘 非UIButton

自定义键盘的原因

自定义键盘的封装网上的例子比比皆是,有的封装的非常完美,直接pod 集成到项目中便可以简单的使用,可是为什么我还要自定义一个呢? 一不是不是为了显摆,二不是网上的功能不满足需求,也不是不够便利 最主要的原因是不够安全!!!

为什么说不够安全

用过 Reveal 的同学都知道,可以抓到任何的 UI 控件,并且完美的展示各个视图的层级。 当然这只是一款软件,一种情况,所谓防小人不妨君子,我们需要更安全的键盘

当前网上的许多键盘都是通过 UIButton 堆起来,这样事件控制方便,title 设置便利,UI设计简易,不用考虑触摸事件等等诸多好处,但是。。。

正是因为如此的便利,有心之人想要抓取你的点击事件、title等等也是非常的便利

苹果官方键盘

苹果官方的键盘,通过 Reveal 可以看到,只要是涉及到具体的实体按键,底层都是一张图片。 至于点击了哪个按钮,可以通过监控触摸事件的变化,来对修饰图层做修改,从而实现一个完美的键盘。 官方键盘的优点:

  • 触摸事件的回调频率在一秒内可以回调几十次
  • 所有的字母都是在一张图片上面,几乎无法抓取到 title
  • 没有的具体的按钮可以监控点击事件,点击的点
  • 图片更加的利于自定义各种复杂界面 从以上优点可以看出,官方的键盘在安全性方面是相当高的

自定义键盘

参考官方的键盘,写出了自己的自定义键盘,也是底层图片实现,监控触摸事件 没有安全只有更安全,这里自定义键盘只是相对于 UIButton 堆积起来的键盘,相对的更加安全,并不是绝对安全,请理解 “更加安全” 这个关键字

完善

由于当前时间比较少,只是设计了几款常用的键盘,需要完善的地方还是有很多,请同学多提建议

已完成:

  • 可自定义每个按键,就是可以定义按键模板
  • 删除事件已经集成完毕
  • 回调事件已经集成完毕
  • 触摸事件已经封装完善,在触摸了每个字母时都有回调
  • 每个按键的点击事件已经完成,只需在事件中作出不同的处理即可

未完成:

  • 键盘上字母未实现随机
  • 简化调用

使用介绍

/**

  • 本库主要是为了实现一个自定义键盘
    1. 所有的按键均是图片组成,最大程度上避免了恶意监控控件(UIButton,UILabel)等,防止获取键盘内容
    1. 所有的事件均通过手指(触摸)的移动,来控制按键变化
  • 触摸事件回调频率高,并且触摸事件中没有数据,最大程度上避免了恶意监控触摸事件,最大程度上避免了恶意监控控件(UIButton,UILabel
    1. 此键盘功能是建立在平台的思想上开发的。做的是一个平台,所有使用者均可以简单的设置自己需要的键盘。
  • 底层逻辑已全部处理完毕,只需要在应用层开发自定义键盘即可
  • KKeyBoardView
    1. 键盘实体。
    1. 对外暴漏接口和回调
    1. 管理所有键盘视图,并负责切换键盘
  • KKeyBoardMainView
    1. 键盘主视图
    1. 管理所有的按键
    1. 处理所有的触摸事件
    1. 将触摸事件转化为按键的状态,将按键状态通知按键
  • KKeyBoardItemView
    1. 按键实体。所有按键的基类
    1. 暴漏给子类按键,重写按键高亮和正常态的方法
  • KKeyBoardNormalView
  • 已实现的普通文本按键。可以直接使用。
  • 根据 title subTitle 自动生成默认风格按键
  • KKeyBoardDeleteView
  • 已实现的删除按键。可以直接使用。
  • 删除按键的一个实现。主要处理长按事件,当按下不松手时,连续回调删除的事件
  • KKShiftItemView
  • 已实现的shift按键。可以直接使用。
  • shift 按键的一个实现。增加了大小写处理
  • Implement 文件夹下的文件
    1. 已经实现了几种键盘。
  • 字母键盘、身份证有效期键盘、身份证号键盘、数字键盘
    1. 已经实现了几种按键
  • 数字按键、文本按键、删除按键
    1. 可以理解为 Demo,可以仿照写法自定义按键和键盘

*/

public enum KKeyBoardType {
    
    /// 纯数字键盘
    case number
    
    /// 含有小数的数字键盘
    case decimalNumber
    
    /// ASC 码键盘
    case letter
    
    /// 大写的ASC 键盘
    case upperLetter
    
    /// 小写的ASC 键盘
    case lowerLetter
    
    /// 身份证有效期
    case idValid
    
    /// 身份证号
    case idNumber
    
    /**** 以下两个键盘还没有实现 ****/
    /// 含有小数点的键盘
    case decimalPadNum
    
    /// 数字和字母键盘
    case numAndLetter
}

因为时间原因,未使用pod集成。但是 podspec 文件已经写好,查看demo即可看到,先本地pod接入

纯字母键盘

纯数字键盘

身份证有效期键盘

身份证号键盘

源码在 我的github 上 【注】请使用 Swift 3 运行

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端吧啦吧啦

手把手教你全家桶之React(一)

16530
来自专栏java闲聊

SpringBoot+Vue2.x登陆功能

32540
来自专栏HTML5学堂

深入剖析iframe跨域问题

HTML5学堂:本文当中我们介绍了跨域的基本知识,讲解到了跨域的相关种类,并讲解了解决跨域中的一种方法——如何使用iframe跨域。讲解了iframe跨域的基本...

2.1K40
来自专栏黑泽君的专栏

ubuntu16.04安装谷歌拼音

  System Settings --> Language Support --> Install/Remove Languages   选中chinese,...

24720
来自专栏云计算教程系列

如何使用WP-CLI安装WordPress

很多人都熟悉WordPress的安装,Wordpress安装起来非常简单,其号称5分钟快速安装。但是,当您需要部署多个Wordpress时,重复的工作会拖慢你大...

17920
来自专栏Google Dart

AngularDart 4.0 高级-安全

本页面介绍了Angular内置的针对常见的Web应用程序漏洞和跨站脚本攻击等攻击的内置保护。 它不包括应用程序级别的安全性,如身份验证(此用户是谁?)和授权(此...

10720
来自专栏向治洪

React Native项目组织结构介绍

代码组织: 目录结构: . ├── components //组成应用的各个组件 │   ├── Routers.android.js //每个组...

29370
来自专栏大前端开发

使用mpvue开发小程序教程(六)

在上一章节中,我们列举了在Vue中能用但在mpvue中不能用或需要特别注意的特性,在实际开发前了解一下还是很有必要的,可以避免浪费找错误的时间。

15340
来自专栏DeveWork

Web 前端性能优化相关内容解析

Web 前端性能优化相关内容,来源于《Google官方网页载入速度检测工具PageSpeed Insights 使用教程》一文中PageSpeed Insigh...

271100
来自专栏青玉伏案

iOS逆向工程之App脱壳

本篇博客以微信为例,给微信脱壳。"砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸...

54550

扫码关注云+社区

领取腾讯云代金券