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

如何在使用故事板或XIB的Swift中将iOS自定义键盘扩展用作可编程自定义输入视图,ios,methods,swift,input,keyboard,Ios,Methods,Swift,Input,Keyboard,我想使用swift中的自定义键盘扩展设计自己的自定义输入视图键盘。现有的Xcode 6.1默认键盘不适合我的应用程序需要。我想要的是一个增强的数字键盘,我会修改它,就像在iOS应用商店的Soulver应用程序中一样 最终,我不需要为其他应用程序提供自定义键盘扩展,但我不介意我的应用程序是否提供一个。在我看来,自定义键盘是自定义输入视图键盘的正确起点 最后,我差不多已经消化了编辑器中的约束,并希望使用故事板或xib 我确实需要能够在应用程序中以编程方式选择键盘扩展。 键盘/自定义视图需要可用于包含

我想使用swift中的自定义键盘扩展设计自己的自定义输入视图键盘。现有的Xcode 6.1默认键盘不适合我的应用程序需要。我想要的是一个增强的数字键盘,我会修改它,就像在iOS应用商店的Soulver应用程序中一样

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

最后,我差不多已经消化了编辑器中的约束,并希望使用故事板或xib

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


这可以作为给定需求的扩展来完成,还是可以轻松地将自定义键盘扩展转换为自定义输入视图?您能举例说明一个或指出我在搜索时遗漏的Swift代码示例吗?谢谢。

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

从你回答问题的方式来看,听起来你在iOS开发方面不是很有经验,试图一次学习太多东西会导致灾难。如果我能重做我当前的项目,我会在目标C中完成它,只是为了大大简化我所学的内容

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

更多详情:

cocoa中的标准自定义输入视图API非常强大,键盘扩展中的API几乎完全是中性的,因此使用自定义输入视图比使用键盘扩展可以做得更多。要激活键盘扩展,需要让用户在iPhone设置中打开它,没有办法解决这个问题,也没有办法选择他们在应用程序中选择的键盘(除了完全不允许自定义键盘扩展)

如果您出于任何原因(跟踪使用信息、激活应用内购买、访问首选项)需要访问互联网或应用内的数据,您还必须说服用户启用“完全访问”,它向用户发出了一个令人难以置信的可怕警报,对用户来说,打开它意味着你可以监视他们并窃取他们的密码

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

开发一个键盘扩展意味着有时候你的扩展由于神秘的原因无法加载,你需要花费数小时来调试原因。我的Swift键盘扩展有时只使用println()语句进行调试,因为我无法加载调试器。由于苹果的工具还不能很好地与键盘扩展配合使用,也不能很好地与Swift配合使用,所以将它们结合使用会让你的痛苦成倍增加

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


如果您想使用标准的cocoa自定义输入视图API,那么使用Swift可能很好。由于这是一门如此年轻的语言,您仍然需要处理更多的问题,但您不会浪费那么多时间去解决神秘的、似乎无法解决的问题,试图找出这些问题是由Swift、键盘扩展API、Xcode及其调试器的故障还是您自己的错误造成的

虽然我很感激你的回答,但你的建议链接并不是Swift中的。与SWIFT到Objto-C的易学性的一个很好的比较是OOP PASCAL或OOP基础到C++的区别。有些语言只是在你学习的时候有更多的语法来阻碍你。Objective-C的标点符号比Swift多得多,所以选择了Swift。我想你没有领会我的意思。我把全部时间都转到了Swift,我非常喜欢它。但你绝对是在走最困难的道路来解决你的问题。我已经更新了我的答案,提供了更多的细节以提供帮助。通过iOS代码示例进行了详细阐述,并将问题扩展到为什么会崩溃?->