Хобрук: Ваш путь к мастерству в программировании

Печать в macOS на Swift

Обратите внимание, это не вопрос iOS.

У меня есть приложение на основе NSView (т. Е. Не на основе документов), и я хотел бы установить подсистему печати. Я могу заставить NSView в моем основном контроллере печатать нормально. Однако я хочу иметь специальный вид, созданный только для печати. Представление не должно отображаться в окне приложения. Представление содержит два NSTextFields, два NSTextView и 5 меток.

Кажется, я не могу придумать, как это сделать. Я пробовал различные формы этих примеров:

  1. Добавить NSView в мое главное окно просмотра? Кажется логичным, но это неудобно в раскадровке (я не могу расположить представление в раскадровке).

  2. Программно создать собственный NSView с помощью xib?

Для этого я попробовал:

@IBOutlet weak var printView: NSView!
….
let printOperation = NSPrintOperation(view: printView!)

Это приводит к всеобъемлющему сообщению «фатальная ошибка: неожиданно обнаружен nil при разворачивании необязательного значения».

Розетки настроены правильно (думаю)

  1. Отдельный ViewController? Если да, то как мне избежать использования двух кнопок печати - одной для вызова контроллера печати, а второй - для печати представления PrintController.

Я пробовала читать документацию Apple, но я учусь не лучшим образом. В Swift также нет документов для печати, которые я нашел. Я задавал много вопросов по SE, но ничего не ответил. Не могли бы вы указать мне решение, пожалуйста.

21.03.2017

  • Связанный: stackoverflow.com/a/29375748/2227743 21.03.2017
  • Спасибо, Эрик. Однако это помогает: что, если мне понадобится немного более сложный макет (полдюжины полей и меток)? Я должен был сказать это в своем вопросе. 21.03.2017
  • Пожалуйста, к сожалению, я ничем не могу помочь, мои знания о печати на Mac заканчиваются. Будем надеяться, что кто-нибудь найдет решение. И обязательно укажите все необходимые детали в своем вопросе. :) 21.03.2017
  • Сделаю, и еще раз спасибо. 21.03.2017

Ответы:


1

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

Вы можете дважды проверить, так ли это, переопределив метод viewDidLoad на контроллере. Если он никогда не вызывается, ваше представление никогда не загружается из пера.

Обычно механизм пользовательского интерфейса заботится обо всем этом, когда вы отображаете контроллер представления, поэтому это может сбивать с толку, когда этого не происходит.

Вы должны иметь возможность запускать загрузку представления, обратившись к свойству представления на контроллере. например

_ = self.view // Touch the view to force it to load

https://developer.apple.com/documentation/appkit/nsviewcontroller/1434401-view содержит дополнительную информацию.

Вы также можете позвонить loadView() напрямую, хотя обычно это не одобряется.

19.03.2019
Новые материалы

Блоги, которые обязательно нужно прочитать специалистам по обработке и анализу данных :
Добро пожаловать в 2020! Новый год и новое десятилетие. Поскольку мы начинаем новый и захватывающий год в науке о данных, важно, чтобы профессионалы открыли для себя лучшие блоги по науке о..

Универсальный базовый доход
Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

Абсолютно имеет смысл.
Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

МАШИННОЕ ОБУЧЕНИЕ И EDA
Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

В чем основные различия между ReactJS и React-Native?
В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

LeetCode — Умножение строк
Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..