2012-02-04 55 views
2

我正在使用Cocoa的ScreenSaver API編寫屏幕保護程序。它是爲64位拱編譯的,我在Lion上運行它。可可屏幕保護程序配置面板自由浮動

爲了使配置,我已加入下列到主視圖:

- (BOOL)hasConfigureSheet 
{ 
    return YES; 
} 

- (NSWindow*)configureSheet 
{ 
    if (configureSheet == nil) { 
     if (![NSBundle loadNibNamed: @"WTConfigureSheet" owner: self]) { 
      NSLog(@"Failed to load config sheet"); 
      return nil; 
     } 
    } 

    ScreenSaverDefaults *defaults = 
     [ScreenSaverDefaults defaultsForModuleWithName: WTModuleName]; 

    backgroundColorWell.color = [defaults objectForKey: @"BackgroundColor"]; 
    lightLetterColorWell.color = [defaults objectForKey: @"LightLetterColor"]; 
    darkLetterColorWell.color = [defaults objectForKey: @"DarkLetterColor"]; 

    return configureSheet; 
} 

新鮮安裝保護程序之後,點擊「選項」使配置片出現不作爲片材,但自由浮動在屏幕上,沒有邊框。否則,它會正常工作並在被解僱後消失。

當我再次單擊「選項」時,配置表再次出現,這次可以正確顯示爲一個首選項窗口。然後它立即凍結,所以我不能點擊它的任何控件。

有沒有人有一個想法是什麼原因導致此行爲?

+0

我已經檢查了控制檯輸出;沒有什麼可疑的發現。 – waldrumpus 2012-05-11 20:20:06

回答

7

我有同樣的問題,因爲今天你和我花了相當長的一段時間來弄清楚這一個,所以這裏是我的解決方案:

我發現NSWindow只要您撥打loadNibNamed:owner:出現。所以必須有某種機制可以從筆尖自動打開窗口。

所以我重新檢查了筆尖,發現在屬性檢查器窗格上有一個名爲"Visible At Launch"的選項,默認情況下會選中該選項。

解決方案非常簡單:只需取消選中該複選框並按預期工作即可。

我發現很容易忽視,因爲您期望打開窗口,但實際上會打開兩次(一次自動,第二次,因爲System Preferences.app將其顯示爲表單),這會導致毛刺。

可能發生的另一個問題,取決於您在課堂上如何定義ivar/property的方法是,在第一次關閉並重新打開窗口後,它會凍結。 這是因爲在默認情況下,窗口在關閉時會自行釋放。

因此,請務必在界面構建器中取消選中"Release When Closed"

+0

你剛剛解決了我的兩個問題!一旦我清除了「啓動時可見」複選標記,窗口就會正確連接;一旦我清除了「關閉時釋放」一個,凍結就消失了。當你思考這兩件事情時,兩者都具有絕對的意義,但首先你必須知道他們在那裏......謝謝! – waldrumpus 2012-05-13 10:31:16

1

爲使該代碼爲寫的,你需要創建在主視圖的頭文件名爲configureSheetNSWindow*類型的一個IBOutlet,保存文件,以便Interface Builder中可以看到變化的工作,然後加載WTConfigureSheet.xib在Interface Builder和將頂層窗口組件連接到文件所有者 - > configureSheet。

+0

謝謝。一回到我的Mac,我就會試試這個! – waldrumpus 2012-05-07 11:56:57

+0

我已經檢查了代碼和xib,它按照您的建議設置。 – waldrumpus 2012-05-11 20:19:33

相關問題