2015-01-02 114 views
0

我有一個窗口應用程序,在屏幕上有一些複選框。MAC可可 - 以編程方式設置窗口大小

我使用NSUserDefaults不僅存儲複選框的狀態,而且還存儲主窗口的寬度,高度和位置(x/y)。

我的問題是要找到正確的事件來讀取和設置窗口屬性。

目前我做這件事:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
// read preferences 
UserPreferences *userPrefs = [[UserPreferences alloc] init]; 
NSRect oldFrame = [window frame]; 
if([userPrefs MainWindowWidth] > 0) 
    oldFrame.size.width = [userPrefs MainWindowWidth]; 

if([userPrefs MainWindowHeight] > 0) 
    oldFrame.size.height = [userPrefs MainWindowHeight]; 

if([userPrefs MainWindowTop] > 0) 
    oldFrame.origin.y = [userPrefs MainWindowTop]; 

if([userPrefs MainWindowLeft] > 0) 
    oldFrame.origin.x = [userPrefs MainWindowLeft]; 

// set windows properties 
[window setFrame:oldFrame display:YES animate:NO]; 
} 

它的工作原理,但畫面首先顯示的默認大小,然後使視覺改變爲保存大小打嗝。這告訴我,在事件鏈中設置這些參數太晚了。

我也嘗試了awakefromnib,但這似乎太早,因爲設置寬度和高度被忽略。

在屏幕上顯示之前,哪個事件是正確的插入此代碼以重置窗口的權限?

任何意見,將不勝感激。每一個開始都很艱難。

謝謝。

回答

1

這是因爲窗口的框架首先從筆尖加載,然後顯示窗口(一旦完成從筆尖加載)。

您可以在界面構建器中禁用「啓動時顯示窗口」複選框,並在applicationDidFinishLaunching中手動顯示它。

+0

感謝您的回覆。我無法找到「開始時顯示窗口」,但有「可見於發佈」。這是你指的是什麼? – Mozzak

+0

所以我試圖禁用「可見在啓動」,並顯示「applicationDidFinishLaunching」窗口。它仍然是閃爍的。它似乎首先加載窗口的默認大小,然後新的大小後。任何其他想法? – Mozzak

0

applicationDidFinishLaunching函數是一個可以完成任務的地方,當應用程序啓動完成後但是你真正想要的是當它剛剛從筆尖加載時,但在它顯示之前,趕上窗口。 IOW,你試圖在錯誤的地方做到這一點。

您需要更多控制在您的窗口,所以...創建您自己的窗口控制器!創建自己的繼承自NSWindowController的類,比如MyWindTrol。在實現文件中,添加awakeFromNib函數,並盡力控制窗口的大小和位置。

在你的nib文件中,從庫中拖出一個NSObject,將它聲明爲類MyWindTrol,並控制拖動連接,以便你的MyWindTrol對象的window屬性指向窗口對象。

相關問題