Мне нужно немного обработать, прежде чем мое приложение сможет начать печать, поэтому я делаю это в потоке, а когда все готово, я делаю
dispatch_async(dispatch_get_main_queue(),^(){
ULIPrintableView *viewForPrinting = [[ULIPrintableView alloc] initWithData:data];
NSPrintOperation *operation = [NSPrintOperation printOperationWithView:viewForPrinting];
NSPrintPanel *panel = operation.printPanel;
ULIPrintAccessoryViewController *settingsVC = [ULIPrintAccessoryViewController new];
viewForPrinting.printOperation = operation;
settingsVC.printView = viewForPrinting;
[panel addAccessoryController:settingsVC];
[operation runOperation];
});
Все работает нормально, за исключением того, что для NSScrollView (обертывание NSTableView) в дополнительном представлении.
Этот вид отлично прокручивается с помощью обычной проводной мыши ПК, подключенной к Mac, но с трекпадом Apple (как MacBook, так и внешним) и прокруткой двумя пальцами вид прокрутки не обновляется, пока вы не уберете пальцы с трекпада.
Кажется, что какие-то события, перемещаемые касанием, не были доставлены.
Если я изменю последнюю строку в блоке с -runOperation
на -runOperationModalForWindow:delegate:didRunSelector:contextInfo:
, прокрутка снова будет в порядке, но на самом деле у меня нет окна, в котором я мог бы показать этот лист в моем случае использования.
Если я вызываю любой метод runOperation напрямую, вместо того, чтобы выполнять потоки, прокрутка прокручивается нормально.