我想知道是否可以像按钮一样打开第二个窗口。我不知道怎么做,请帮忙。
答案 0 :(得分: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来定义一个显示窗口的方法。
- (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
答案 1 :(得分:0)
将按钮连接到NSWindow的orderFont:
操作。我没有Xcode 4,所以我不能告诉你如何在那里做,但对于Xcode 3,在Interface Builder中打开xib。在按住控制键的同时,单击并从按钮拖动一条线到笔尖中的另一个窗口(如果打开窗口,则拖动标题栏,否则将其拖到xib项目窗口中的图标上)。在弹出的菜单中,选择“orderFront:
”或“makeKeyAndOrderFront:
”(取决于所需的行为)。
如果窗口在另一个笔尖中,你需要使用像Stephen这样的方法。