如何使用故事板或xib在Swift中将iOS自定义键盘扩展用作可编程自定义输入视图

时间:2014-11-17 20:40:53

标签: ios methods swift input keyboard

我想在swift中使用自定义键盘扩展设计我自己的自定义输入视图键盘。现有的Xcode 6.1默认键盘组不符合我的应用需求。我想要的是一个增强的数字键盘,我会修改,就像iOS应用程序商店中的Soulver应用程序一样。 http://www.acqualia.com/soulver/iphone/

最终我不需要自定义键盘扩展程序来提供给其他应用程序,但我不介意我的应用程序提供一个。在我看来,自定义键盘是自定义输入视图键盘的正确起点。

我最终只是在编辑器中消化了约束,想要使用故事板或xib。

我确实需要能够以编程方式在应用程序中选择键盘扩展名。 键盘/自定义视图需要对包含它的应用程序可用,而无需在iOS设置中激活。

可以根据要求将其作为扩展名完成,还是可以将自定义键盘扩展名轻松转换为自定义输入视图?你能说明一个或指出我在搜索时遗漏的样本Swift代码吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我现在正在Swift中编写键盘扩展名,强烈建议不要这样做。 Swift和键盘扩展API都是全新的,没有很好的文档记录,创建了重要的学习曲线,并且都有重大的错误或奇怪的实现细节可以解决。

从您提出问题的方式来看,听起来您在iOS开发方面非常有经验,并且尝试一次学习太多东西是一种灾难。如果我可以完成当前的项目,我会在Objective C中完成它,只是为了大大简化我正在学习的内容。

但好消息是,您不需要键盘才能在其他应用中运行。这是一个好消息,因为在您自己的应用程序中编写自定义输入键盘类非常简单,也是一个很好的起点。有很多关于如何这样做的现有文档,包括关于堆栈溢出的这篇优秀文章。

How do I retrieve keystrokes from a custom keyboard on an iOS app?

更多细节:

cocoa中的标准自定义输入视图API非常强大,键盘扩展中的标准自定义输入视图API几乎完全中断,因此您可以使用自定义输入视图执行远远超过键盘扩展的操作。要激活键盘扩展,需要让用户在iPhone设置中打开它,没有办法解决它们在应用程序中选择的键盘(除了根本不允许自定义键盘扩展)。

如果您出于任何原因需要访问互联网或应用中的数据(跟踪使用情况信息,激活应用内购买,访问首选项),您还必须说服您的用户启用“完全访问权限”#34 ;,这提供了一个令人难以置信的可怕警报,向用户读取,好像打开它意味着你将能够监视他们并窃取他们的密码

回到你不想在扩展中使用Swift的原因。首先,Objective C并没有导致Xcode的代码解析器每天崩溃多次,而在Swift中进行开发确实会导致Xcode本身崩溃。在Objective C中,调试器几乎总是正确的,在当前版本的Swift中,您通常无法看到数组或字典内容,有时它显示的是不准确的,并且当单步执行代码时通常会采用无意义的路由。在Objective Code中进行开发意味着您不必更新代码,因为对Objective C本身进行了更改,使用Swift几乎可以保证他们会在每个主要版本(最后一个版本)中进行重要的语法更改在九月做了)。

开发键盘扩展程序意味着有时您的扩展程序由于神秘的原因而无法加载,并且您需要浪费时间来调试原因。我的Swift键盘扩展有时仅使用println()语句进行调试,因为我无法加载调试器。由于Apple的工具还不能很好地使用键盘扩展功能,而且还不能与Swift一起使用,因此将它们一起使用会使您的痛苦成倍增加。

最终结果是,如果您不想在自己的应用程序之外使用此键盘,那么使用键盘扩展API构建它是愚蠢的。如果你确实需要使用键盘扩展API,那么在Swift中这样做是愚蠢的。这是由一个全职工作的傻瓜写的,试图发送基于Swift的键盘扩展。

如果你想使用标准的cocoa自定义输入视图API,那么使用Swift可能就好了。你仍然需要处理其他问题,因为它是一种如此年轻的语言,但是你不会失去那么多天来看似不可解决的神秘问题,试图找出它们是否是由Swift引起的,键盘扩展API,Xcode及其调试器中的失败,或您自己的错误。