在没有 textField 的情况下捕获文本输入

Posted

技术标签:

【中文标题】在没有 textField 的情况下捕获文本输入【英文标题】:Catch text input without textField 【发布时间】:2012-02-24 08:55:24 【问题描述】:

这里有一个专业人士的问题... 我正在 Ipad 上开发一个应用程序,我正在使用带蓝牙的条形码阅读器。我已经将条形码阅读器与我的 Ipad 同步,我可以毫无问题地捕捉到 textField 上的文本。 当我阅读条形码时,我不想将它放在 textField 上,我想在课堂上捕捉它,处理它并决定如何处理它。我已经在互联网上搜索了这样做的方法,但我找不到它。有人可以帮助我吗?我可以做一个类来接收输入字符串吗?

我有点迷茫,任何帮助对我来说都会非常有用

感谢您的宝贵时间!!

【问题讨论】:

textField 现在是怎么连接起来的? 【参考方案1】:

我已经解决了创建隐藏文本字段的问题,该字段在创建视图控制器时成为第一响应者。在我完成了相同的 viewController 之后,这个文本字段的委托。当 BT 代码条阅读器进行读取时,他会在最后返回,因此它调用 - (BOOL)textFieldShouldReturn: 我处理信息的地方。我希望这对将来遇到同样问题的人有用。我贴出代码:

_textSender = [[UITextField alloc] initWithFrame:CGRectMake(150, 300, 300, 25)]; [_textSender setBackgroundColor:[UIColor whiteColor]]; [self.view addSubview:_textSender]; _textSender.hidden=YES; [_textSender becomeFirstResponder]; _textSender.delegate=self;

- (BOOL)textFieldShouldReturn:(UITextField *)textField [messageSenderProtocolDelegate message:textField.text]; return YES;

这不是一个漂亮的方法,它给我带来了一个小问题,当 BT 条形码断开键盘时出现,这对我不利。我希望我的视野始终保持干净,没有键盘。现在我研究一下是不是键盘显示时调用的函数,防止他被显示

如果有人有任何建议会很有用,但感谢您的帮助 Erik!

【讨论】:

【参考方案2】:

您可以通过使用子类 UIApplication 和覆盖来捕获任何事件

- (void)sendEvent:(UIEvent *)event

私有 UIEvent 标头声明以下方法

- (GSEventRef)_gsEvent;

GSEventRef 在名为GraphicsServices 的私有框架中声明。如果您能找到对您的活动有用的信息,请查看那里。

我会尝试从_GSEventGetGSEventRecord 记录一些标志。

您可以四处寻找,但如果您需要特定的东西,请确保您提交rdar://

如果您需要使用私有的东西,请编写代码,使其在发生更改时不会中断(或中断但不会崩溃)。

【讨论】:

嗨,埃里克!首先感谢您的关注,我已经根据您的建议进行了一些测试,问题是键盘的 UIEvent 是私有 UIEvent,所以我无法捕捉到它。为了测试它,我对 UIApplication 进行了子类化并像这样重写了 sendEvent 函数:- (void)sendEvent:(UIEvent *)event [super sendEvent:event]; NSLog(@"Event type:%i Event subtype:%i", event.type, event.subtype); \n 我看到类型是 -1,所以这是一个我无法处理的私有事件。还有其他想法吗?我可以用其他方式处理事件吗?感谢您的帮助 Hey Eric,子类型是 0。我已经以不同的方式解决了这个问题,我现在发布它以便对其他程序员有用,但感谢您的帮助!

以上是关于在没有 textField 的情况下捕获文本输入的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 stagereference 的情况下设置 input-TextField 的焦点?

如何使文本框自动捕获用户正在键入的内容?

在没有 NumberFormatter 的情况下停止 TextField 中的字符重复

Jetpack Compose TextField 捕获键盘 Enter-input

UIAlertView 文本字段捕获 onchange

TextField 没有动态更新