2012-05-15 68 views
0

我有一個自定義的NSView子類,我試圖打印。我有一個控制器運行下面的代碼:NSPrintOperation從來沒有調用drawRect:

MyCustomView *printableView = [[MyCustomView alloc] init]; 
NSPrintOperation *po = [NSPrintOperation printOperationWithView:printableView]; 
[po runOperation]; 

當我設置斷點,該代碼被執行,並在一個NSView自定義分頁方法(knowsPageRange:rectForPage:)得到運行,但視圖的drawRect:方法不會被調用。它顯示打印對話框,但它打印的所有內容都是空白頁。

爲什麼我的drawRect:方法永遠不會被調用?我需要先做一些設置嗎?

回答

2

NSView的指定初始值爲-initWithFrame:。雖然MyCustomView可以使用-init進行初始化,但其實施-init應該調用[super initWithFrame:someRect]。它是這樣做的嗎?

換句話說,你的觀點是否有一個框架?

+0

是的,它的init會調用'[super initWithFrame:someRect]',但它的框架稍後會在'rectForPage:'中修改以適應頁面大小。 –

+0

在'-rectForPage:'期間修改視圖框架似乎很奇怪。你有沒有嘗試給它一些合理的框架開始,而不是修改它?另外,你有沒有嘗試過實現自定義分頁,只是爲了看看會發生什麼? –

+0

事實證明,我的自定義子視圖有一個名爲「frameSize」的屬性,它干擾了同名的現有函數,導致它陷入零。你的回答幫我找到了問題!謝謝! –