...绕了一大圈,又绕回原生来了,今天,学习一下swift3.0语法下的自定义键盘.效果图如下:

其实,很简单,只需要把UITextView(或者UITextField)的inputView属性设置为自定义的视图即可.

这里,我举一个栗子,添加一个自定义的emoji键盘.

思路:a.先来一个UIViewController,用来承载一个ToolBar(只是为了放几个按钮,切换系统键盘和自定义键盘)

b.在该UIViewController上面放一个UITextView即可.更改inputView属性.

c.新建一个UIViewController作为自定义键盘的界面承载.其上放一个UICollectionView布局自定义键盘界面

1:完成a.b两步,比如把UITextView.inputView = UIViewController().view 效果会如下:

2.OK,接下来我找了个emoji.plist文件用来存放emoji表情数据,写了一个model存放表情数据使用,然后在collectionView上显示即可.

其中,重点是如何显示emoji表情,大致如下:

        code = dict["code"] as! String?  //emoji.plist中的code
//1.从字符串中取出十六进制的数
//创建一个扫描器,扫描器可以从字符串中提取数据
let sanner = Scanner.init(string: code!)
//2.将十六进制转为字符串
var result:UInt32 = 0
sanner.scanHexInt32(&result)
//3.将十六进制转换为emoji字符串
emojiStr = "\(Character.init(UnicodeScalar.init(result)!))"

其实就是使用Scanner扫描转换emoji表情为系统可识别的字符串即可,其实,emoji本质就是一些String.

3.使用MVC在collectionView上显示出表情之后,可以通过闭包回调把选择的表情回调至承载UITextView的控制器中即可.

基本思路就是这么简单.  demo在 https://github.com/pheromone/swift3.0-emojiKeyboard  








swift3.0 自定义键盘的更多相关文章

  1. swift3.0自定义相机界面

    这是公司上上上一个项目的自定义相机界面,原来是swift2.0写的,今天改为swift3.0,记录一下. 效果图如下:                                         ...

  2. Swift3.0 自定义tableView复用cell 的写法,与CollectionViewCell的不同,数据model

    Model数据 class HospitalModel: NSObject { //后边不赋值 会报错 var imgurl :String = "" var introducti ...

  3. Swift3.0 功能二 (表情键盘与图文混排)

    随着iOS越来越多表情键盘以及图文混排的需求,本文运用Swift3.0系统的实现其功能以及封装调用方法,写的不好,如有错误望各位提出宝贵意见,多谢 项目源码地址: 相关知识点都有标识 项目源码地址 废 ...

  4. Vue2.0的变化 ,组件模板,生命周期,循环,自定义键盘指令,过滤器

    组件模板: 之前: <template> <h3>我是组件</h3><strong>我是加粗标签</strong> </templat ...

  5. Swift3.0变化分享

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  6. swift3.0变化总结

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  7. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

  8. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  9. iOS 日期处理 (Swift3.0 NSDate)

    处理日期的常见情景 NSDate -> String & String -> NSDate 日期比较 日期计算(基于参考日期 +/- 一定时间) 计算日期间的差异 拆解NSDate ...

随机推荐

  1. 如何在VMware系统中的ubuntu16.04中建立与win7系统的共享文件夹

    点击虚拟机设置一次得到如图所示 系统默认放在了 /mnt/hgfs文件夹 点击虚拟机安装vmware tools 解压vmware tools压缩包 运行sudo ./vmware-install.p ...

  2. python-Tornado 框架

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  3. Spring Boot项目打包部署到外部Tomcat

    1.生成war包 1)修改POM文件,将打包类型改为war:<packaging>war</packaging> <packaging>war</packag ...

  4. 小程序setData修改数组某一项的值

    官方文档是这样的: changeItemInArray: function() { // you can use this way to modify a danamic data path this ...

  5. 不安装Oracle数据库使用plsqldevloper

    1.Oracle官网下载instantclient 解压到D:\zl\instantclient_11_2 2.配置环境变量 ORACLE_HOME = D:\zl\instantclient_11_ ...

  6. 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息

    1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...

  7. python中RabbitMQ的使用(工作队列)

    消息可以理解为任务,消息发送者可以看成任务派送者(sender),消息接收者可以看成工作者(worker). 当工作者接收到一个任务,还没完任务时分配者又发一个任务,此时需要多个工作者来共同处理这些任 ...

  8. 【LeetCode】最大子序列和

    要求时间复杂度 O(n). e.g. 给定数组 [-2,1,-3,4,-1,2,1,-5,4],其中有连续子序列 [4,-1,2,1] 和最大为 6. 我完全没有想法,看了答案. C++实现: int ...

  9. java中super和this的使用

    要说super就先要说this."this",作为一个特殊的关键字,它的规则如下: 1.可以表示构造函数传递.this(a,b)表示调用另外一个构造函数.这里面的this就是一个特 ...

  10. 数组Array.sort()排序的方法

    数组sort排序 sort比较次数,sort用法,sort常用 描述 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本.如果调用方法sort()时没有使用参数,将按字母顺序( ...