Необходимо напечатать пользовательский заголовок, используя obj-c

Я создаю NSView, и он хорошо печатается с этим фрагментом кода:

NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];
[printInfo setHorizontalPagination:NSFitPagination];
[printInfo setHorizontallyCentered:YES];
[printInfo setVerticallyCentered:YES];
NSPrintOperation *operation = [NSPrintOperation printOperationWithView:printView printInfo:printInfo];

NSPrintPanel *printerPanel = operation.printPanel;

printerPanel.options = NSPrintPanelShowsPaperSize | NSPrintPanelShowsPageRange | NSPrintPanelShowsOrientation | NSPrintPanelShowsPageSetupAccessory | NSPrintPanelShowsPreview;

[operation runOperationModalForWindow:window delegate:nil
                       didRunSelector:nil contextInfo:nil];

У меня также есть этот код в applicationDidFinishLaunching

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:@YES forKey:NSPrintHeaderAndFooter];

Теперь, если я попытаюсь переопределить эти методы

 - (void)drawPageBorderWithSize:(NSSize)pageSize
 - (NSAttributedString *)pageHeader

Их даже не вызывают. Кто-нибудь знает почему?

2 ответа

Решение

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

На самом деле я сделал это: для многострочного ярлыка, который у меня есть в.xib, я добавил собственный класс в инспекторе

тогда у меня есть файлы.h & .m - это работает для текста, но не для изображений

NSTextFieldForPrint.h:

#import <Cocoa/Cocoa.h>
@interface NSTextFieldForPrint : NSTextField
@end

NSTextFieldForPrint.m

#import "NSTextFieldForPrint.h"
@implementation NSTextFieldForPrint
- (NSAttributedString *)pageHeader
{
    NSLog(@"Am i called?");
    NSAttributedString *theHeader = nil;
    NSString *myImagePath = [[[NSBundle mainBundle] resourcePath]  stringByAppendingString:@"header.jpg"];
    NSImage *pic = [[NSImage alloc] initWithContentsOfFile:myImagePath];
    NSTextAttachmentCell *attachmentCell = [[NSTextAttachmentCell alloc] initImageCell:pic];
    NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
    [attachment setAttachmentCell: attachmentCell ];
    theHeader = [NSAttributedString  attributedStringWithAttachment: attachment];
    return theHeader;

    //return [[NSAttributedString alloc] initWithString:@"adsfasdf"];
}

@end
Другие вопросы по тегам