Печать на какао: сделать запрос на печать просоченным до окна - PullRequest
1 голос
/ 07 октября 2011

Я новичок в печати Какао и пытаюсь понять, как воспользоваться преимуществами встроенной NSView печати.Я не написал никакого кода или ничего не сделал в IB, чтобы включить печать, поэтому я просто встроил базовую функциональность во все окна какао.

Моя проблема в том, что если один из NSTextField s вокно имеет фокус, когда я нажимаю Cmd-P для печати, оно пытается напечатать только это текстовое поле.Я хотел бы, чтобы это текстовое поле игнорировало запрос на печать, чтобы он просачивался до окна.У меня также есть NSTableView, и я бы хотел, чтобы то же самое произошло с этим.Если в нем выбрана строка, я бы хотел, чтобы NSTableView игнорировал запрос на печать, поэтому, подобно текстовому полю, он будет в конечном итоге передан окну (или представлению NSView содержимого окна).

Помощь?

1 Ответ

1 голос
/ 07 октября 2011

Вы можете изменить метод, который элемент меню Print… настроен для вызова в вашем основном файле пера. По умолчанию он настроен на вызов -print: первого респондента. В случае текстового поля, которое имеет фокус, оно будет вызывать print:, а это не то, что вам нужно.

Вместо этого вы можете определить метод, такой как -printWindow:, в своем классе основного контроллера. Затем измените пункт меню Print…, чтобы вызвать метод -printWindow: первого респондента. Затем в этом методе вы можете отправить print: в представление содержимого основного окна. Код будет выглядеть примерно так:

.h:

@interface MDAppController : NSObject <NSApplicationDelegate> {
    IBOutlet NSWindow *window;
}

- (IBAction)printWindow:(id)sender;

@end

.m:

@implementation MDAppController

- (IBAction)printWindow:(id)sender {
    NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
    [[window contentView] print:sender];
}

@end

Пример проекта, который показывает это:

http://www.markdouma.com/developer/PrintWindow.zip

Что касается вашего комментария, он звучит так, как во втором контроллере окна / второго окна, контроллер второго окна отсутствует в цепочке респондента, а контроллер главного окна находится в цепочке респондента. Это может быть по разным причинам. Ваш главный оконный контроллер является делегатом приложения? Вы можете попробовать убедиться, что второй оконный контроллер настроен на delegate своего окна. Надеюсь, это должно вставить оконный контроллер в цепочку респондента. В противном случае для получения дополнительной информации о цепочке респондента см. Руководство по обработке событий Cocoa: цепочка респондента .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...