第二窗口创建Objective-C Cocoa

时间:2011-03-31 22:57:38

标签: objective-c cocoa nswindow

我想知道是否可以像按钮一样打开第二个窗口。我不知道怎么做,请帮忙。

2 个答案:

答案 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这样的方法。