大致实现思路如下

1.主键盘26个按钮采用UICollectionView实现,通过自定义flowlayout显示自动布局和定义大小间距
2.我们看到的键盘切换,以及底部几个按钮采用自定义button来实现
3.键盘父视图采用继承UIView实现,数据处理全部放在ZMKeyBoardView内部进行实现处理,
4.外部调用只需要创建ZMKeyBoardView,让当前的textfield的inputview = ZMKeyBoardView() 即可

看下代码层
大致说下根目录作用,采用MVC实现

1.image文件夹主要放自定义键盘需要的图片
2.util中的ZMKeyBoardUtil主要放置需要用到的数据源逻辑处理,方便我们使用的时候直接调用
3.ZMKeyBoadModel就是键盘需要用的模型
4.ZMCollectionViewCell是我们实现的自定义cell。ZMCollectionLayout是我们自定义的layout来满足指定间距大小动态化布局的。
5.。ZMKeyBoardView就是我们的父视图,所有的自定义键盘控件添加,逻辑处理都放在这里边。

实现的话,主要的26个英文item采用的是collectionView,分三个区。样式放在了cell里边,布局属性放到了自定义layout里边。其他5个按钮统一使用ZMKeyBoardButtonView进行实现。已经开出需要用到的方法,比如点击高亮,切换处理。等
调用比较方便,调用示例
let keyBoards = ZMKeyBoardView()
        textfield1.inputView = keyBoards
        keyBoards.inputSource = textfield1