2012-01-11 118 views
7

确定我已经看了看,并且我想我缺少一些关于自定义键盘和将文本插入UITextField的内容。像许多人一样,我正在用自己的一套钥匙帽在自定义UIButtons上创建一个UIView自定义键盘。然后,我将这个视图分配给UITextField的inputView,然后当该文本字段成为第一响应者时,弹出我的键盘。键盘内部捕捉按钮动作并将其转换为按键动作。iOS制作自定义键盘为UITextField生成标准击键

但是从这里我很困惑如何最好地发送我的按键到文本字段。我已经看到很多例子,如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 - 科学野性猜测)标准iOS键盘可以像这样操作,但是使用特定的协议来传递键击。所以我想要做的就是手动生成与标准键盘相同的事件/消息链。

那么我该如何做到这一点?或者我甚至可以用公共API来做到这一点?或者是标准键盘的操作与UITextField绑定得太紧?

+0

我知道这个问题很老,但我创建了一个完整的,有效的开源示例,说明如何做到这一点叫做数字键盘,并将它放在[Github]上(https://github.com/lnafziger/Numberpad ) – lnafziger 2013-07-08 04:36:50

回答

1

这是一个非常开放的问题。真的,这取决于你选择你想要的东西。 Apple's documentation陈述如下:

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

您也可以制作一个UITextField子类,并明确实现inputView的getter以返回指向您的自定义键盘视图类的指针。在这个getter中,你可以像之前建议的那样设置一个类似UIControl的目标/操作系统。这样做不需要从外部设置自定义键盘 - 这些都是在内部处理的。它也将该代码放入一个地方。

一旦自定义文本字段的第一个响应者辞职,您可以将文本字段的指针从键盘中删除。

+0

从某种意义上说,我要求的是Apple Docs的状态 - 实现数据输入的方法。在这种情况下,我希望这些方法能够模拟标准的方法,这样我就可以用最少的代码更改(即设置或不设置inputView)来交换我的键盘。由于其他原因,子类化UITextField在我的列表中(并且在这种情况下也是我的后备),但我仍然认为在子类中的UITextField指针进行混洗是手动操作,并且它冒犯了我在消息传递环境中这样做能够做我想做的事。 – 2012-01-12 12:55:08

+0

我认为你正在将自定义键盘功能变成不是的东西。自定义键盘只是一个视图。这不是苹果专用键盘框架的一个特殊子类(一个大而复杂的东西),它可以让你连接到他们的系统。试想一下,如果您制作了一个自定义键盘,用户不会按按钮输入文本,而是绘制图片。苹果的内部密钥转发代码如何将这些数据发送到文本字段? – pe8ter 2012-01-13 03:22:57

0

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

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

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

+0

我明白你在说什么,但我不确定它比我所做的更好。我已经必须明确地将自定义键盘的具体实例分配给特定的文本字段。所以对我来说,Rube Goldberg有点让键盘本身通过视图堆栈进行搜索以找到第一个响应者。对我而言,缺少的是让键盘明确地知道它所绑定的文本字段。 – 2012-02-11 14:55:31