2013-05-07 55 views
1

我有,我定義了一個自定義單元格,並已覆蓋的方法 的應用 - (空)drawWithFrame:inView:定製的NSCell drawWithFrame:inView方法不是在OSX得到調用10.8

這種方法在畫我的自定義單元格沒有任何問題,只要我在OS X 10.6或更高版本上使用Xcode 3.2構建我的應用程序。

現在我試圖遷移代碼來構建和Xcode 4+在OS X 10.8。而我發現的是,我的自定義單元格不再被繪製。把破發點並運行應用程序通過調試後,我意識到,覆蓋 - (無效)drawWithFrame:inView:自定義單元格的方法是沒有得到根本調用。

我的問題是:

1)這是什麼使這個方法不是在所有調用在OS X 10.8,而它被調用和工作完全在OS X 10.6或以上?

2)什麼替代我必須解決這個問題?

感謝, Mriganka

+0

的Xcode的版本幾乎是這裏無關緊要 – 2013-05-25 08:00:13

+0

PLZ向我們展示了該方法的類和定義的聲明。和您使用它的代碼 – 2013-05-25 08:21:50

回答

0

我有同樣的問題,但我使用OSX 10.7

也許它一個Xcode 4.x的事情的Xcode 4.x的?

我注意到當我調用setEnabled(從YES更改爲NO或NO爲YES)時,我的子類NSTextFieldCell上的drawWithFrame不會被調用,對於NSTextField,在初始化NSTextFieldCell之後,但在drawWithFrame之前, NSCell被自動調用。但是,如果我調用setEnabled(在初始化我的子類NSTextFieldCell後)並且沒有發生變化(即setEnabled:YES,但它已經設置爲YES),那麼drawWithFrame確實會被調用。

不幸的是,我需要執行從YES的setEnabled爲NO爲YES,因爲我想禁用我的NSTextField而服務器的呼叫正在取得,然後啓用它的回調。如果回調(如「密碼錯誤」),我需要自定義繪製的NSTextFieldCell邊境紅色..我必須通過覆蓋drawWithFrame做到這一點。

我的猜測是,setEnabled利用NSGraphicsContext並執行一個savingGraphicsState/restoreGraphicsState(可能是錯誤的),這會拋出NSTextFieldCell/drawWithFrame中使用的圖形上下文。我的猜測是,如果發生了變化(setEnabled從YES到NO或NO到YES),setEnabled中的NSGraphicsContext僅用於使用,因爲當更改沒有發生時,我沒有問題...我認爲這會有意義因爲在呈現新圖形以向用戶顯示視圖不可選或不可編輯方面沒有意義,因爲它確實確實不可選或可編輯。

+0

xcode的版本幾乎與此無關:) Xcode是一個IDE – 2013-05-25 08:19:51

+0

忘記圖形上下文。視圖需要繪製單元格,如果出於某種原因沒有發生,只涉及視圖和單元格 – 2013-05-25 08:24:29

0

回答我的問題是要重新繪製後手動我打電話的setEnabled,通過調用的NSTextField setNeedsDisplay。

我認爲這可能也適用於你,因爲它會導致繪製出現手動。

glhf!

-Eric