如何在 iOS 上的 NativeScript 中显示打印机选取器

How to Display the Printer Picker in NativeScript on iOS

本文关键字:显示 打印机 选取 NativeScript iOS 上的      更新时间:2023-09-26

调用UIPrinterPickerController后,我无法在 NativeScript 中显示打印机选取器。

这是我的代码:

var printPicker = UIPrinterPickerController.printerPickerControllerWithInitiallySelectedPrinter(null);
console.log("printPicker: " + printPicker);
var found = printPicker.presentAnimatedCompletionHandler(false, function(printerPicker, userDidSelect, error) {
    if (error != null) {
        console.log("error: " + error);
    }
    console.log("printerPicker: " + printerPicker);
    console.log("userDidSelect: " + userDidSelect);
});
console.log("found: " + found);

这是输出:

CONSOLE LOG file:///app/pages/main/main-page.js:16:16: printPicker: <UIPrinterPickerController: 0x146e948b0>
2016-04-22 15:19:17.101 checkInApp[349:41167] WARNING: Calling -[UIPrinterPickerController presentAnimated:completionHandler:] on iPad
CONSOLE LOG file:///app/pages/main/main-page.js:24:16: found: true
CONSOLE LOG file:///app/pages/main/main-page.js:16:16: printPicker: <UIPrinterPickerController: 0x146e948b0>
2016-04-22 15:19:19.627 checkInApp[349:41167] WARNING: Calling -[UIPrinterPickerController presentAnimated:completionHandler:] on iPad
CONSOLE LOG file:///app/pages/main/main-page.js:24:16: found: false
CONSOLE LOG file:///app/pages/main/main-page.js:21:20: printerPicker: <UIPrinterPickerController: 0x146e948b0>
CONSOLE LOG file:///app/pages/main/main-page.js:22:20: userDidSelect: false

在这里收到有关如何在 NativeScript 中调用它的答案后,我可以验证我的回调是否确实运行。但是,如果我点击运行上述代码一次的按钮,回调不会触发(我假设这是选取器应该显示的点。然后,如果我再次点击它,回调会触发,userDidSelect为 false。

我已经读到您可以使用子类来控制选取器的显示printerPickerControllerParentViewController,但我认为它会默认只从主视图中显示选取器。

如何从 NativeScript 中显示选取器?

更新

它似乎在运行打印机模拟器的iOS模拟器上运行良好。

更新 2

实际上,它正在iPhone 6模拟器上工作。它不适用于iPad模拟器或实际的iPad设备。我想我在某处读到需要将选取器作为 PopOver 打开,但我不确定如何实现它。任何帮助将不胜感激。

好的,问题是您必须在iPad上的弹出窗口中打开UIPrinterPickerController。因此,我们需要检测运行应用程序的设备并调用适当的方法。这是如何完成的:

if ( ! UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    printPicker.presentAnimatedCompletionHandler(false, completionHandler);
} else {
    printPicker.presentFromRectInViewAnimatedCompletionHandler(view.frame, view, false, completionHandler);
}

我仍在寻找对viewview.frame的参考 - 我这里有一个悬而未决的问题。

更新

正确

参数引用的答案在这里。基本上,在loaded处理程序中,您将获得对带有 args.object.ios.viewview的引用。