关于Custome Keyboard的一些坑

1.打开主程序:
一如很多前辈所说,即是打开containerAPP,苹果提供了NSExtensionContext下的OpenURL方法,但是官方文档中又提到:

Each extension point determines whether to support this method, or under which conditions to support this method. In iOS 8, only the Today extension point (used for creating widgets) supports this method.

可能苹果目的是所有的extension都支持该方法,但是在iOS8中只有Today extension 是支持的,而其他并不支持,想想现在都已经10.2了 :D

在stackoverflow上,找到了一个解决办法,是在iOS8.3+可以使用的。不知道后期是否还有更好的方法,但是这个是可以解决打开问题,如果有更好的方法,评论分享啊。

UIResponder* responder = self;
while ((responder = [responder nextResponder]) != nil) {
  if ([responder respondsToSelector:@selector(openURL:)] == YES) {
      [responder performSelector:@selector(openURL:)
                      withObject:url];
        }
    }
//url是主程序的URLScheme

主程序会在AppDelegate里的

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
   
    return YES;
}

里接收Extension发送来的请求,要处理什么事情,只要在这里进行就可以了

2.判断是否开启完全访问

[UIPasteboard generalPasteboard].string == nil ?

因为开启了完全访问的权限后,就能访问到系统的剪切板,所以通过这个方法间接的判断是否开启完全访问。

3.实时获取剪切板内容
可以考虑开启NSTimer,然后利用 [timer setFireDate:[NSDate distantPart]] 开启,在ViewDidDisappear里 [timer setFireDate:[NSDate distantFuture]] 关闭。

4.控制内存占用问题
因为苹果对自定义键盘严格的内存限制,超过会导致键盘直接崩溃,所以控制内存占用是重中之重
· 避免循环引用,及时释放
· 绘制文字会瞬间占用很大的内存,且无法立即释放,所以比如在加载Emoji表情的时候,尽量使用图片来显示。完整的Emoji表情,可以在http://www.unicode.org/emoji/index.html 找到。对应按键的字符,也最后使用图片。
· 加载图片使用imageWithContentsOfFile的方法
· 还有一些方法的使用可以参考搜狗输入法的优化总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在六月份,总有很多热点信息是与高考有关的。昨天在朋友圈里看到一组“高考感人相片”,其中有一张是站在考场外的家长焦灼...
    留小馆阅读 1,769评论 4 3
  • 我带着黑白的面具 在形形色色的人群之中移动, 舞台的灯光, 只有在静谧的时刻 才会开启。 但,在喧哗的...
    蔷薇巧克力阅读 3,229评论 0 1
  • 长期从事编程活动的程序员都期望在50多岁时能爬到一个足够高的职位,或者能顺利的退休。 但我在这里讨论的可能是一个你...
    大圣众包阅读 3,349评论 2 2
  • SDWebImage的三个常用方法 愿编程让这个世界更美好
    小苗晓雪阅读 1,873评论 0 0

友情链接更多精彩内容