Как отобразить средство выбора принтера в NativeScript на iOS

Я не могу отобразить средство выбора принтера в NativeScript после вызова UIPrinterPickerController.

Вот мой код:

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, я могу убедиться, что мой обратный вызов действительно выполняется. Однако, если я нажму кнопку, которая запускает приведенный выше код один раз, обратный вызов не сработает (я предполагаю, что это точка, которую должен отобразить Picker.); затем, если я коснусь его еще раз, обратный вызов сработает, и userDidSelect будет ложным.

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

Как я могу отобразить средство выбора из NativeScript?

ОБНОВЛЕНИЕ

Кажется, он отлично работает в симуляторе iOS с запущенным PrinterSimulator.

ОБНОВЛЕНИЕ 2

Собственно, он работает на симуляторе iPhone 6. Он не работает на симуляторе iPad или на реальном устройстве iPad. Я думаю, что где-то читал, что сборщик нужно открывать как PopOver, но я не уверен, как это реализовать. Любая помощь будет оценена.


person swatkins    schedule 22.04.2016    source источник


Ответы (1)


Хорошо, проблема в том, что вам нужно открыть UIPrinterPickerController во всплывающем окне на iPad. Итак, нам нужно определить устройство, на котором работает приложение, и вызвать соответствующий метод. Вот как это делается:

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

Я все еще ищу ссылку на view и view.frame - у меня есть открытый вопрос по этому поводу.

ОБНОВЛЕНИЕ

Ответ на вопрос о правильных параметрах находится здесь. По сути, в обработчике loaded вы получаете ссылку на view с помощью args.object.ios.view.

person swatkins    schedule 23.04.2016