Метод делегата UIPrinterCutterBehavior никогда не вызывался
У меня есть простое приложение для iOS, которое распечатывает чеки на принтер STAR-TSP650II AirPrint. Отпечатки выполнены успешно, но мне нужно, чтобы задания были напечатаны на 1 странице, поскольку это квитанция... и принтер способен это сделать. Существует два метода делегирования для AirPrint:
- (CGFloat)printInteractionController:(UIPrintInteractionController *)printInteractionController
cutLengthForPaper:(UIPrintPaper *)paper;
- (UIPrinterCutterBehavior)printInteractionController:(UIPrintInteractionController *)printInteractionController
chooseCutterBehavior:(NSArray *)availableBehaviors;
Я не могу заставить эти методы вызываться. Я попытался поместить точки останова и журналы в методы, чтобы увидеть, если они вызваны, но нет. Вот мой код:
#pragma mark - Print:
- (void)printReceipt:(UIPrinter *)printer {
NSURL *receiptURL = [NSURL URLWithString:@"https://myurl.com/printer"];
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
[controller setDelegate:self];
[controller setPrintInfo:[UIPrintInfo printInfo]];
[controller setPrintingItem:receiptURL];
// contact:
[printer contactPrinter:^(BOOL available) {
// print:
[controller printToPrinter:printer completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {
}];
}];
}
- (CGFloat)printInteractionController:(UIPrintInteractionController *)printInteractionController cutLengthForPaper:(UIPrintPaper *)paper {
NSLog(@"this never gets called.");
return CGFLOAT_MAX;
}
- (UIPrinterCutterBehavior)printInteractionController:(UIPrintInteractionController *)printInteractionController chooseCutterBehavior:(NSArray *)availableBehaviors {
NSLog(@"this never gets called either.");
return UIPrinterCutterBehaviorCutAfterEachJob;
}
2 ответа
Я нашел ответ на свой вопрос.
Это должен быть STAR, который не настроил свой принтер с AirPrint должным образом.
У них есть 2 iOS SDK; Стандарт и Legacy... Legacy SDK обладает всеми функциями, необходимыми для резки бумаги. Если вы столкнулись с чем-то подобным, посмотрите, есть ли у производителя SDK для AirPrint.
Класс / Контроллер, в котором вы написали метод протокола / делегата, попробуйте это
[self setDelegate:controller];
и скажи мне, если это не работает.