2011-03-31 111 views

回答

3

首先设置一个IBAction,当用户点击按钮时被调用。

- (IBAction)buttonClicked:(id)sender { 

} 

在Interface Builder中,从要大火,行动方法实施NSButton对象控制拖动。

现在,要创建第二个窗口,您可能需要创建一个SecondWindowController类来管理它。向NSWindow声明一个IBOutlet,并将其与Interface Builder相连接,就像您对IBAction所做的一样(通过控制拖动到IBOutlet声明)。

在初始化程序中,加载包含您所展示窗口的nib文件。

- (id)init { 
    if (self = [super init]) { 
     [NSBundle loadNibNamed:@"DubBouncerConversionProgressWindow" owner:self]; 
    } 
    return self; 
} 

然后,通过调用orderFront来定义窗口的方法:on。

- (void)displayWindow { 
    if (![progressWindow isVisible]) { 
     [progressWindow setIsVisible:YES]; 
     [progressWindow orderFront:nil]; 
    } 
} 

现在,当用户单击按钮时,您可以在SecondViewController实例上调用-displayWindow。

- (IBAction)buttonClicked:(id)sender { 
    [mySecondViewController displayWindow]; 
} 

这里是发生了什么事情的全貌:

FirstViewController.h

@interface FirstViewController : NSObject { 
    SecondViewController *mySecondViewController; 
} 

- (IBAction)buttonClicked:(id)sender; 

@end 

FirstViewController.m

@implementation FirstViewController 

- (IBAction)buttonClicked:(id)sender { 
    if (!mySecondViewController) { 
     // If the second view controller doesn't exist yet, make it! 
     mySecondViewController = [[MySecondViewController alloc] init]; 
    } 
    [mySecondViewController displayWindow]; 
} 

@end 

SecondViewController.h

@interface SecondViewController : NSObject { 
    IBOutlet NSWindow *progressWindow; 
} 

- (void)displayWindow; 

@end 

SecondViewController.m

@implementation SecondViewController 

- (id)init { 
    if (self = [super init]) { 
     [NSBundle loadNibNamed:@"DubBouncerConversionProgressWindow" owner:self]; 
    } 
    return self; 
} 

- (void)displayWindow { 
    if (![progressWindow isVisible]) { 
     [progressWindow setIsVisible:YES]; 
     [progressWindow orderFront:nil]; 
    } 
} 

@end 
+0

这是一个很好的答案,但是你可以更好地使用子类'NSWindowController'并且让它处理NIB的加载和卸载(后者不在上面处理)。 – 2011-03-31 23:12:08

+0

感谢:D男人我很感激:D – Muttur 2011-03-31 23:35:13

+0

@Muttur,别忘了接受他的回答然后:) – 2011-04-01 01:10:31

0

按钮连接到NSWindow的orderFont:行动。我没有Xcode 4,所以我不能告诉你如何在那里做,但是对于Xcode 3,在Interface Builder中打开xib。在按住控制键的同时,单击并拖动一行按钮到笔尖中的另一个窗口(如果窗口已打开,则拖过标题栏,否则将其拖至xib项目窗口中的图标上)。在弹出的菜单中,选择“orderFront:”或“makeKeyAndOrderFront:”(取决于所需的行为)。

如果窗口位于另一个笔尖中,则需要使用类似Stephen的方法。