以编程方式模拟 UITextField 的键盘的返回键

Posted

技术标签:

【中文标题】以编程方式模拟 UITextField 的键盘的返回键【英文标题】:Simulate UITextField's keyboard's return press programmatically 【发布时间】:2014-06-12 13:22:28 【问题描述】:

有没有办法以编程方式模拟按下“返回”键,例如调用 UITextField/UIKeyboard/用户按下返回键时调用的函数?

我知道在例程 textFieldShouldReturn 的某个地方被调用,但我认为这不是唯一发生的事情?我简单地浏览了调试器,似乎按下“return”键调用的函数不止一个。

我正在寻找的是一种拥有 UITextField 子类的方法,在这个子类中,我可以调用类似 [self.inputview returnKeyPressed] 的东西,这个函数的作用与用户按下返回键。

【问题讨论】:

您想要实现什么功能?只是关闭键盘,还是以编程方式插入换行符? 实际上我有一个按钮作为文本字段的右侧视图,用户除了可以选择之外还应该能够单击该按钮来触发保存/搜索/其他内容按返回键。澄清一下,我说的是 UITextField 的一个子类,它可以被任何其他控件透明地使用。目前我只是在点击按钮时调用[self.delegate textFieldShouldReturn:self],但我有点担心我需要调用的其他可能很重要的函数。 【参考方案1】:

(对于希望在未来实现这一目标的任何程序员

您可以通过将其添加到您希望“模拟”您的 Enter 按键的任何功能中来实现此目的。

    [self textFieldShouldReturn:yourTextFieldName];

您需要在 viewdidload 中设置您的文本字段委托:

[youtTextFieldName setDelegate:self];

【讨论】:

【参考方案2】:

我想我会做的是实现textFieldDidEndEditing: UITextFieldDelegate 方法,并实现当文本字段在那里结束编辑(保存等)时需要发生的一切。然后,您对按钮所要做的就是调用一个方法,该方法实现代码来告诉文本字段让第一响应者辞职。

执行此操作,您将拥有一种方法来处理文本字段应结束编辑的两种方法。

【讨论】:

不幸的是,textFieldDidEndEditing 对我来说非常不可靠,因为例如,如果用户只更改输入焦点,则不应进行保存。 textFieldShouldReturn 似乎是放置自定义代码的正确位置,我宁愿调用此方法(除了我需要调用其他任何方法来模拟成熟的返回压力?) @JiaYow 好吧,无论哪种方式,您都可能希望添加一个检查以查看内容是否更改,因此您选择哪个方向可能并不重要。你不应该调用这些方法中的任何一个。离开文本字段根据需要调用它们。【参考方案3】:

根据:This Previous Question

ProcessSerialNumber psn;
GetFrontProcess( &psn );

// make some key events
CGEventRef keyup, keydown;
keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)76, true);
keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)76, false);

// forward them to the frontmost app
CGEventPostToPSN (&psn, keydown); 
CGEventPostToPSN (&psn, keyup); 

// and finally behave friendly
CFRelease(keydown);
CFRelease(keyup);

您可以在以下位置找到十六进制字符代码列表:/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h

【讨论】:

CGEventCreateKeyboardEvent 和相关 API 仅适用于 macOS。 UITextField 是一个 ios 类,所以很遗憾,这些 API 不可用。 您可以将CGEventPostToPSN替换为CGEventPost,将第一个参数替换为0,这样就不需要查找前面进程的序列号,如@987654322 @.【参考方案4】:

这是一个非常古老的话题,但这个场景仍然是相关的,所以我正在回答它

如果,并且我强调您对大 IF 的关注,您需要调用按下返回按钮背后的逻辑,那么我认为假设您已将文本字段的委托挂在某个地方,这非常简单。

您只需要在文本字段的委托上自己调用方法

[textfield.delegate textFieldShouldReturn];

【讨论】:

以上是关于以编程方式模拟 UITextField 的键盘的返回键的主要内容,如果未能解决你的问题,请参考以下文章

在UITextfield中输入文本后以编程方式更改焦点

以编程方式点击 UITextField [关闭]

iOS7 模拟器中的 UITextField 不接受来自 mac 键盘的任何输入

以编程方式附加字符后在 UITextField 中显示文本的结尾[重复]

iOS 模拟器 - 以编程方式禁用连接硬件键盘

以编程方式设置 Xcode 模拟器、键盘和 Touch ID 设置,用于 UI 测试