ios - 如何使用 Storyboard或 xibs 在 Swift 中使用 iOS 自定义键盘扩展作为可编程自定义输入 View

标签 ios methods swift input keyboard

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

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

我终于在编辑器中消化了约束,并想使用 Storyboard或 xib。

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

是否可以根据要求将其作为扩展来完成,或者自定义键盘扩展是否可以轻松转换为自定义输入 View ?您能否举例说明或指出我在搜索时遗漏的示例 Swift 代码?谢谢。

最佳答案

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

从您表达问题的方式来看,您似乎在 iOS 开发方面经验不足,并且试图一次学习太多东西是灾难的根源。如果我可以重做我当前的项目,我会在 Objective C 中完成,只是为了大大简化我正在学习的内容。

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

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

更多细节:

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

如果您出于任何原因(跟踪使用信息、激活应用内购买、访问首选项)需要访问互联网或应用内的数据,您还必须说服您的用户打开“完全访问”,这会显示令人难以置信的可怕警报,读给用户就好像打开它意味着您将能够监视他们并窃取他们的密码

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

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

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

如果您想使用标准的 Cocoa 自定义输入 View API,那么使用 Swift 可能没问题。你仍然需要处理额外的问题,因为它是一门如此年轻的语言,但你不会浪费这么多天来解决神秘的、看似无法解决的问题,试图弄清楚它们是否是由 Swift、键盘扩展 API、 Xcode 和它的调试器,或者你自己的错误。

关于ios - 如何使用 Storyboard或 xibs 在 Swift 中使用 iOS 自定义键盘扩展作为可编程自定义输入 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981579/

相关文章:

ios - 双击无法缩放图像

ios - 订阅自定义 UIView 的变量

c# - 使用参数动态调用 dll 和方法

python - python 方法如何自动接收 'self' 作为第一个参数?

java - 如何使用两种方法打印出星号?

ios - 如何在 TableViewController B 中选择行时在 ViewController A 中启用 UI 按钮

ios - 在 iOS 8.0 嵌入式框架中使用 Alamofire

swift - 如何安排进入某个区域后的某个时间推送通知? swift

swift - 取消选择 TableView 中的所有开关

ios - 如何在多个 .xcassets 文件之间切换