【问题标题】:How do I use a iOS custom keyboard extension as a programmable custom input view in Swift using storyboards or xibs如何使用故事板或 xib 在 Swift 中使用 iOS 自定义键盘扩展作为可编程自定义输入视图
【发布时间】:2015-01-14 21:21:01
【问题描述】:

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

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

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

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

是否可以根据要求将其作为扩展来完成,或者自定义键盘扩展是否可以轻松转换为自定义输入视图?你能说明一个或指出我在搜索时错过的示例 Swift 代码吗?谢谢。

【问题讨论】:

标签: ios methods swift input keyboard


【解决方案1】:

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

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

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

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

更多细节:

cocoa 中的标准自定义输入视图 API 非常强大,键盘扩展中的 API 几乎完全中性,因此使用自定义输入视图比使用键盘扩展可以做更多的事情。要激活键盘扩展需要让用户在他们的 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 自定义输入视图 API,那么使用 Swift 可能就可以了。你仍然需要处理额外的问题,因为它是一门如此年轻的语言,但你不会浪费那么多天来试图弄清楚它们是否是由 Swift、键盘扩展 API、 Xcode 和它的调试器,或者你自己的错误。

【讨论】:

  • 虽然我很欣赏你的回答,但你的建议链接特别不在 Swift 中。与 Swift 与 Objective-C 的易学性的一个很好的比较是 OOP Pascal 或 OOP Basic 与 C++ 之间的区别。有些语言只是有更多的语法阻碍你学习它们。 Objective-C 比 Swift 有更多的标点符号,这就是选择 Swift 的原因。
  • 我认为你错过了我的观点。我已经全职切换到 Swift,并且非常喜欢它。但是你绝对是在用最困难的方法来解决你的问题。我已更新我的答案以提供更多详细信息以提供帮助。
猜你喜欢
  • 2013-08-04
  • 2018-05-28
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多