在没有 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 中的字符重复