forked from vase4kin/Dreamkas
-
Notifications
You must be signed in to change notification settings - Fork 0
Работа со сканером [iOS]
siggb edited this page Oct 27, 2014
·
7 revisions
Подключение по шагам:
- включаем сканер по нажатию на кнопку на корпусе (нижняя, маленькая)
- выполняет unlink - одновременно зажимаем 2 кнопки на корпусе
- включаем сканер
- в настройках устройства выбираем Socketmobile[CHS<код>]
- производится подключение без ввода кодов по профилю Bluetooth-MFI
- обмен информацией по каналу сканер-iPad с использованием SDK от SocketMobile.
Ссылка на SDK и документацию: here.
Подключение по шагам:
- включаем сканер
- в настройках устройства выбираем Datalogic Keyboard
- видим код, цифры которого последовательно считываем сканером по штрих-кодам
- завершаем подключение, слышим звуковой сигнал, сканер подключен по профилю Bluetooth-HID
Программируем сканер на добавление к считанным кодам спец-символа: (необходимо для контроля ввода кодов)
- входим в режим программирования
- выбираем тип спец-символа: Suffix
- последовательно вводим нужный нам спец-символ (или цепочку спец-символов) в 16 СС (например, для символа $ надо ввести код 24)
- выходим из режима программирования
Особенности работы Objective-C:
- сканер считывает коды посимвольно - следовательно, в поля ввода символы так же вводятся посимвольно (интервал ввода ~0.01-0.03 сек)
- чтобы скрыть клавиатуру у UITextView надо проделать следующее:
- (void)viewDidLoad
{
[super viewDidLoad];
dataArray = [NSMutableArray array];
timeArray = [NSMutableArray array];
// кастомный слой ввода, который показывается всегда, если в поле вводится текст
// (даже если поле скрыто) -> поэтому высота минимальная
UIView *inp_view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 0.01f)];
[inp_view setBackgroundColor:[UIColor yellowColor]];
// присваиваем слой ввода и скрываем
[self.hiddenTextView setInputView:inp_view];
[self.hiddenTextView setHidden:YES];
}
- в протокольном методе отрабатываем посимвольный ввод:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSLog(@"- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text");
NSLog(@"-> text = %@", text);
// помещаем в массив таймштамп
[timeArray addObject:[NSDate date]];
// если пришел спец.символ конца строки - обновляем таблицу
if ([text isEqualToString:SPECIAL_EOS_CHAR]) {
[self.tableViewItem reloadData];
}
else if (timeArray.count == 1) {
// если пришел первый символ - помещаем его в массив данных
[dataArray addObject:[NSMutableString stringWithString:text]];
}
else if (timeArray.count > 1) {
// если пришел не первый символ
NSDate *second_date = timeArray.lastObject;
NSDate *first_date = timeArray[timeArray.count-2];
double interval = [second_date timeIntervalSinceDate:first_date];
NSLog(@"interval = %f", interval);
// в случае, если интервал между текущим и предыдущим таймштампами меньше константы -
// - значит ввод символов текущего кода
if (interval <= AVER_TIMEINTERVAL_BETWEEN_CHARS) {
[(NSMutableString*)dataArray.lastObject appendString:text];
// здесь обновлять таблицу можно, но накладно
//[self.tableViewItem reloadData];
}
else {
// если интервал большой, значит ввод нового кода -
// - создаем новую строку
[dataArray addObject:[NSMutableString stringWithString:text]];
}
}
return YES;
}
- За индикацию конца строки со штрих-кодом отвечает спец-символ $. В принципе, по этому спец-символу можно также добавлять новые строки в dataArray. Однако, сейчас добавление новых строк осуществляется проверкой интервалов между вводом двух символов в UITextView. Два макроса:
#define AVER_TIMEINTERVAL_BETWEEN_CHARS 0.05f
#define SPECIAL_EOS_CHAR @"$"
Полный проект здесь: here.