每一个键盘都须要有一个按钮,那就是切换“下一个键盘”的按钮。在系统键盘,这个按钮使用了一个Emoji表情中的 🌐表情来显示。可是对于其它的功能按键,却没有对应的Unicode编码,所以在字体库中也找不到对应的图形,并且Unicode 中的这个图形集合的展现是不统一的: 🌐⇪⌫⌨? 。ios
因此最好仍是叫UE从新设计一下这些功能按键的图片吧。git
固然,你也能够本身绘制这个按钮了。能够参考这个开源项目。tasty-imitation-keyboard,这个开源项目里面的全部Function key 样式都是本身绘制的github
要想在键盘播放声音,你须要开启键盘的权限。当你可能会想,至少能够直接调用AudioServicesPlaySystemSound
这个标准函数来在键盘上播放声音。可是事实上,若是用户没有开启权限,那么这个方法会卡住键盘,咱们能够这样调用:app
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { AudioServicesPlaySystemSound(1104) })
固然,若是你在调用这个AudioServicesPlaySystemSound
函数以前先判断一下用户是否开启了权限,那么就须要上面这样作了。框架
另外,咱们若是只是想播放系统默认的按键点击声音,也能够像下面那么作(记住,调用以前,记得先检查用户是否有权限,不然会卡住键盘):iphone
extension UIInputView: UIInputViewAudioFeedback { public var enableInputClicksWhenVisible: Bool { get { return true } } func playInputClick() { UIDevice.currentDevice().playInputClick() } }
须要注意的是,若是你使用 AudioServicesPlaySystemSound
这个来播放声音,那么你在声音播放期间是不能取消的,并且多处同时调用还会形成声音重叠。若是你想精确控制声音的播放,仍是使用AVPlayer框架吧。async
是的,你的键盘必须适配全部的iOS设备,不然苹果不会审核经过你的APP,不过你的容器APP不必定要适配iPad。其实这是能够理解的,假设你的容器APP不适配iPad,可是用户仍然能够在iPad上从AppStore 下载你的APP,此时,用户仍是能够从设置中添加你的键盘Extension,全部你的键盘Extension必须设配iPad。函数
同时,若是用户在iPad上装了iphone版的应用,而应用中又有相关依赖设备型号的业务逻辑或界面逻辑,则要当心不要只是用UIDevice类提供的方法来判断设备,还要结合UIView的大小来判断,不然就会可能出错,甚至崩溃。布局
若是你要绘制一个像素宽的线,则要当心,代码里设置UIView的frame的Width或Height为1只是代表一个屏幕点而已,在渲染时,会转换为像素。性能
另外注意,在ihone 6 以上的设备,都有一个放大模式,这个放大模式,其实就是屏幕的长宽点数降级:
因此,要得到一个像素宽的线,只须要计算
1 / (一个点对应的像素)
苹果在iOS 8开始,强烈推荐咱们使用Size Class来开发界面。一个这么优雅的解决方案,在开发键盘扩展时,却行不通。由于,对于键盘来讲,Size Class 并无用。例如,在6+ 的横屏下,键盘在两个方向上都是严格的Compact
,即便在竖屏时,这个两个方向的layout constant 有很大的不一样。对于iPad,键盘在两个方向上都是Regular
。
是的,AutoLayout是比较好的方式来布局和约束咱们的键盘界面,可是若是约束不少,设置不合理,或者有多余的约束,会比直接用layoutSubviews
带来大量的性能损耗。
那么快捷键 Command + K
能够帮到你
对于第三方的键盘,咱们不能获取用户在系统的键盘设置内容,例如首字母自动大写、自动更正、取消Shift功能等等设置。咱们只能要不假设一个默认值,要不就本身管理一份本身的键盘设置。
在某一些APP中使用第三方键盘,会出现一些诡异的问题,例如崩溃、键盘高度更新失败(只显示了一部分)。
若是你跟踪UIInputViewController
的生命周期,你会发现更加诡异的问题。例如:
viewWillAppear
被调用了,可是 viewDidAppear
却没有被调用。若是你更新键盘的高度操做放在 viewDidAppear
方法中,则会致使键盘显示不全。幸亏这个问题目前好像只在iOS 8 中出现,iOS 9 中并无这个问题。没错,有时候你的键盘就会平白无故地崩溃了,有时是由于你的键盘启动太慢了,有时却没有任何理由,对于这些崩溃,你能够不用管。
是的,若是你的iOS设备外接了物理键盘,那么第三方键盘都是不可用的。
没错,若是你想实现相似系统复制、粘贴的popup menu,你必须得本身实现一套了。