2013-05-25 55 views
1

我用一個叫做Draw​​ing的drawRect定義了一個自定義類。我已經在我的NIB中佈置了包含具有繪圖子視圖的NSScrollView的視圖。當我啓動程序時,屏幕是空白的。有趣的是,當我以編程方式爲NSScrollView創建documentView時,我在滾動視圖中得到一個圖像。當我在我的setDocumentView中使用nib實例時,我什麼都沒有。界面生成器NSScrollView不能用IB定義查看

因此,如果圖紙視圖在IB設置,

[_scrollViewWorkspace setDocumentView:_drawing]; //does not work. 

[_scrollViewWorkspace setDocumentView:[[Drawing alloc] initWithFrame:NSMakeRect(0,0,[[_scrollViewWorkspace documentView ]bounds].size.width, [[_scrollViewWorkspace documentView] bounds ].size.height)]]; 

的偉大工程!

爲什麼我不能靜態綁定NIB中的繪圖對象?

回答

0

當您設置的自定義類的筆尖文件到您的自定義類的子類NSView的,在運行時,這個類的一個實例將使用initWithCoder:而不是initWithFrame:創建。

您可以輕鬆地檢查,看看這是否是通過添加以下方法來定製Drawing鑑於案情:

- (id)initWithCoder:(NSCoder *)coder { 
    NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); 
    return [super initWithCoder:coder]; 
} 

然後啓動你的應用程序,看看是否[Drawing initWithCoder:]登錄到控制檯。

如果你已經在你的Drawing類中重寫initWithFrame:做定製的初始化(像自動設置的自定義圖像),你需要同樣的代碼添加到initWithCoder:方法,使你最終的結果相同:

- (id)initWithCoder:(NSCoder *)coder { 
    if ((self = [super initWithCoder:coder])) { 
     // do custom initialization here 

    } 
    return self; 
} 
+0

我將代碼添加到類中。沒有任何反應,沒有任何記錄。我在ApplicationDidFinishLaunching中設置文檔視圖。我爲initWithFrame放置了一個存根,並在那裏記錄我的NSLog的輸出。我不認爲initWithCoder是正確的答案。它沒有告訴我爲什麼靜態綁定到IB中的視圖被忽略,但同一個類的[alloc] init]在代碼中工作。 – bc888

+0

即使我在設置documentView之前調用了Drawing中的drawRect。我在ApplicationDidFinishLaunching中設置視圖後再也不會調用它。 – bc888

0

解決!

當我在界面生成器中放置視圖時,我只是將自定義視圖拖到畫布中的NSScrollView。我重新做了佈局,以便使用Embed-> Scroll View並且它工作正常。

Bruce