2015-01-02 71 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属性指向窗口对象。

相关问题