以编程方式模拟 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 的键盘的返回键的主要内容,如果未能解决你的问题,请参考以下文章
iOS7 模拟器中的 UITextField 不接受来自 mac 键盘的任何输入