Перехватывать ввод текста без textField

Вот вопрос к профи... Разрабатываю приложение на Ipad и использую считыватель штрих-кодов с bluetooth. Я синхронизировал считыватель штрих-кода с моим Ipad, и я могу без проблем поймать текст в текстовом поле. Когда я читаю штрих-код, я не хочу помещать его в текстовое поле, я хочу поймать его в классе, обработать и решить, что с ним делать. Я искал в Интернете, как это сделать, но я не могу его найти. Кто-нибудь может мне помочь? Могу ли я сделать класс делегатом для получения входных строк?

Я немного потерялся с этим, и любая помощь будет очень полезна для меня.

Спасибо за ваше время!!


person Jpellat    schedule 01.02.2012    source источник
comment
Как сейчас подключено textField?   -  person Rayfleck    schedule 01.02.2012


Ответы (2)


Я решил проблему создания скрытого текстового поля, которое становится первым ответчиком при создании контроллера представления. После того, как я сделал тот же 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 отключается, появляется клавиатура, и это не очень хорошо для меня. Я хочу, чтобы мой вид всегда был чистым без клавиатуры. Теперь я выясню, вызывается ли эта функция, когда отображается клавиатура, чтобы предотвратить его отображение.

Если у кого-то есть какие-либо советы, это будет полезно, но скажите спасибо за вашу помощь, Эрик!

person Jpellat    schedule 02.02.2012

Вы можете поймать любое событие, используя подкласс UIApplication и переопределяя

- (void)sendEvent:(UIEvent *)event

Частный заголовок UIEvent объявляет следующий метод

- (GSEventRef)_gsEvent;

GSEventRef объявлен в частной структуре под названием GraphicsServices. . Посмотрите там, если вы можете найти полезную информацию для вашего мероприятия.

Я бы попытался зарегистрировать некоторые флаги из _GSEventGetGSEventRecord.

Вы можете поковыряться, но если вам нужно что-то конкретное, обязательно заполните файл rdar://.

Если вам нужно использовать приватные вещи, напишите свой код таким образом, чтобы он не ломался при изменении чего-либо (или ломался без сбоев).

person Erik Aigner    schedule 01.02.2012
comment
Привет Эрик! Прежде всего, спасибо за ваш интерес, я провел несколько тестов с вашим советом, и проблема в том, что UIEvent клавиатуры является частным UIEvent, поэтому я не могу его поймать. Чтобы проверить это, я создал подкласс UIApplication и переписал функцию sendEvent следующим образом: - (void)sendEvent:(UIEvent *)event { [super sendEvent:event]; NSLog(@"Event type:%i Event subtype:%i", event.type, event.subtype); }\n И я вижу, что тип -1, так что это частное событие, которое я не могу обработать. Любые другие идеи? Могу ли я обработать событие по-другому? Спасибо за вашу помощь - person Jpellat; 02.02.2012
comment
Эй, Эрик, подтип равен 0. Я решил проблему по-другому, я публикую ее сейчас, чтобы она могла быть полезна для других программистов, но спасибо за вашу помощь! - person Jpellat; 02.02.2012