Mac开发– 多窗体/Panel : GuoJing's Blog | 用心对待每一行代码

在应用程序开发过程中,我们经常需要用多个窗体,比如用户配置,添加一个东西,或者有关说明等等,毕竟一个窗体能够做的事情太少了,自然而然,我们就需要多个窗体,好吧,现在我来说说如何使用多窗体。

Mac中多窗体包括这么几种,如下图。

基本上Window就是普通的窗体,而后面几种,可以是Panel或者特殊的窗体。而打开窗体的方式有两种,一种是在同一个nib文件里打开,其他的窗体属于一个nib文件描述,第二种是新的nib文件和新的controller。我们的程序还是和上一次的一样,这里说的还是和程序无关,只是用来演示,如下图。

当我们点击“+”的时候,我们希望打开新窗口,我们分别用两种方式打开,{dy}种为内置类型,这个类型是直接在改nib文件中拖动一个窗口。我们绘制ui如下所示。

我们绘制完成之后,就需要在老的窗体中打开这个窗体,不过值得注意的是,默认情况下,这个panel会自动的打开,我们选中panel窗体并取消选择“Visible At Lunch”选项,这样就不会在打开的时候打开panel了。ok,我们继续实现我们的要求。

首先,在Controller里写上这个Panel的申明和定义,并初始化。

初始化我就不写了,就是一个@synthesize,然后我们在Interface Builder中链接,Control+拖动,拖动Controller对象到新的窗体中,并在灰黑色的下拉菜单中选中add_panel。

链接好了之后,我们就在主窗体中添加了一个新窗口的变量,我们可以使用这个变量来打开和关闭窗口。代码如下。

-(IBAction)onAddButtonClicked:(id)sender{
    
if(![add_panel isVisible])
        [add_panel makeKeyAndOrderFront:sender];
}

-(IBAction)onAddPanelClosed:(id)sender{
    [add_panel orderOut:sender];
}

注意:当我们打开Panel窗体的时候,默认情况下,Mac OS X可以通过按ESC来关闭这个窗体,这样有这种可能,打开panel之后关闭再打开出现程序的假死情况,这个时候我们就需要将Panel窗体的“Release On Close”属性给去掉。

这样我们就打开了一个Panel,Panel的特点就是可以用ESC来关闭,适合做配置窗体,当然,也可以使用新窗口来作为窗体。

我们可以创建一个新窗体(xib文件)。创建完成后,和MainWindow一样,我们也有了一个xib文件并且可以使用Interface Builder来编辑。这是两个不同的窗体,我们需要在主窗体中打开新窗体,相比之下,这样代码更加简单。代码如下所示。

-(IBAction)onAddButtonClicked:(id)sender{
    
if(!add_window)
        add_window
= [[NSWindowController alloc] initWithWindowNibName:@"AddPanel"];
    NSWindow
*wnd = [add_window window];
    
if(![wnd isVisible])
        [wnd makeKeyAndOrderFront:sender];
    
else {
        [add_window showWindow: sender];
    }
}

上述方法能够帮助我们打开一个新窗体,这个打开新窗体的方法是通过打开nib文件的名字打开的,比如这里我创建的是AddPanel.xib,那么就是打开xib。不过记得上述方法还要申明一个add_window,方法很简单,就不重复再说了。(IBOutlet NSWindowController *add_window;)

总结一下,虽然有两种打开窗体的方式,但是不同的方式针对不同的需求,个人认为{zh0}还是把两个分的很清楚的窗体分开,而在一起的窗体使用{dy}种Panel形式{zh0}。

:) 8) :evil: :lol: :-| :oops: :wink: :-D :cry: :idea: 8-O :-? :twisted:

郑重声明:资讯 【Mac开发– 多窗体/Panel : GuoJing's Blog | 用心对待每一行代码】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——