【问题标题】:iOS Make Custom Keyboard Generate Standard Key Strokes For UITextFieldiOS 使自定义键盘为 UITextField 生成标准击键
【发布时间】:2012-02-08 07:35:14
【问题描述】:

好的,我已经看了又看,我想我错过了一些关于自定义键盘和将文本插入 UITextField 的内容。像许多人一样,我正在创建一个UIView 自定义键盘,并在自定义UIButtons 上使用我自己的一组键帽。然后我将此视图分配给 UITextField 的inputView,然后当该文本字段成为第一响应者时,我的键盘会弹出。在键盘内部,我捕获按钮操作并将它们转换为按键操作。

但是从这里开始,我对如何最好地将击键发送到文本字段感到困惑。我见过很多例子,比如iOS Custom Keyboard Updating Text Field In Parent ViewReturn Inputs To UITextfield With Custom InputviewHow To Push Key Value Into UITextView From Custom Keyboard In iOS,其中的解决方案似乎是在自定义视图中嵌入一个指向目标UITextField 的指针。

这对我来说似乎不对,至于多个 UITextFields 要么我必须在新文本字段成为第一响应者时手动更改单个自定义键盘上的引用,或者我必须随身携带匹配的自定义我想支持的每个文本字段的键盘。

在我看来,键盘应该只是将触摸转换为标记并将这些标记发送到线路上,以由接收它们的人(第一响应者?)进行解释。 iPad For iPhone Developers 101 Custom Input View Tutorial 似乎这样做了,但创建了一个自定义协议来这样做。我想(实际上是一个 SWAG - Scientific Wild Arsed Guess)标准的 iOS 键盘是这样操作的,但是使用特定的协议来传递击键。所以我想要做的是手动生成与标准键盘相同的事件/消息链。

那么我该怎么做呢?或者我什至可以使用公共 API 来做到这一点?还是标准键盘的操作与 UITextField 绑定的太紧了?

【问题讨论】:

  • 我知道这个问题很老了,但我创建了一个完整的、有效的、开源的例子来说明如何做到这一点,叫做 Numberpad,并将它放在Github

标签: ios keyboard uitextfield


【解决方案1】:

这是一个非常开放的问题。真的,你可以选择你想要的。 Apple's documentation 声明:

输入视图和输入附件视图的子视图可以是任何你想要的。如果它们是按钮或其他控件,则需要为每个控件指定目标和操作,并实现相关的操作方法以执行数据输入或操作。

您还可以创建 UITextField 子类并显式实现 inputView 的 getter 以返回指向自定义键盘视图类的指针。在这个 getter 中,您可以按照之前的建议设置一个类似于 UIControl 的目标/动作系统。这样做可以消除从外部设置自定义键盘的需要——这一切都是在内部处理的。它还将该代码仅放在一个位置。

一旦自定义文本字段退出第一响应者,您可以将文本字段的指针从键盘中剥离出来。

【讨论】:

  • 从某种意义上说,我正在询问 Apple Docs 的确切状态 - 实现数据输入的方法。在这种情况下,我希望这些方法能够模拟标准方法,以便我可以用最少的代码更改(即仅设置或不设置 inputView)将我的键盘换成苹果键盘。子类化 UITextField 出于其他原因在我的列表中(在这种情况下也是我的后备),但我仍然考虑将子类中的 UITextField 指针改组为手动操作,并且在已经存在的消息传递环境中这样做会冒犯我能够做我想做的事。
  • 我认为您正在将自定义键盘功能变成它不是的东西。自定义键盘只是一个视图。它不是 Apple 的私有键盘框架(一个庞大而复杂的东西)的某个特殊子类,它可以让您与他们的系统挂钩。想象一下,如果您制作了一个自定义键盘,用户不按按钮输入文本,而是绘制图片。 Apple 的内部密钥转发代码怎么可能将这些数据发送到文本字段?
【解决方案2】:

我是 iOS 新手,所以如果我所说的没有意义,请原谅我(请善意纠正我)。 :D

您的自定义键盘是否有办法通过主 UIView 中的所有 UITextFields 来寻找 FistResponder 并将其消息发送到该 FirstResponder?我的意思是,UIView 有一个 subviews 属性,您可以在其中查找 UITextFields 并使用 [UITextField isFirstResponder] 属性找到 FirstResponder。那么,你可以使用那个对象吗?

再次,如果这没有意义,我很抱歉,但我也对这个线程非常感兴趣并想贡献一点。

【讨论】:

  • 我明白你在说什么,但我不确定它是否比我正在做的更好。我已经必须将自定义键盘的具体实例显式分配给特定的文本字段。所以对我来说,让键盘本身搜索视图堆栈以找到第一响应者有点鲁布戈德堡。对我来说,缺少的是让键盘明确了解它所绑定的文本字段。
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2015-08-05
  • 2015-07-03
  • 1970-01-01
  • 2020-08-06
  • 2016-07-18
  • 2016-06-30
相关资源
最近更新 更多