objective-c - 第二个窗口创建 Objective-C Cocoa

标签 objective-c cocoa nswindow

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

最佳答案

首先设置一个 IBAction,以便在用户单击按钮时调用。

- (IBAction)buttonClicked:(id)sender {

}

在 Interface Builder 中,按住 Control 键并从要触发该操作的 NSButton 对象拖动到方法实现。

现在,要创建第二个窗口,您可能需要创建 SecondWindowController 类来管理它。向 NSWindow 声明一个 IBOutlet 并将其连接到 Interface Builder,就像对 IBAction 所做的那样(通过按住 Control 键拖动到 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

关于objective-c - 第二个窗口创建 Objective-C Cocoa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507364/

相关文章:

objective-c - 自定义 NSWindow setAlphaValue 和 makeKeyAndOrderFront

macos - 通过拖动 NSView 来移动 NSWindow

iphone - 使用 NSURLRequestReturnCacheDataDontLoad 时离线模式不起作用

objective-c - setValue :forKey: search for the KVC-compliant method or ivar? 的顺序是什么

ios - 我的应用程序在xcode 11.4中找不到sirikit intentdefinition类

c++ - mac 中的 glTexParameteri 段错误

objective-c - 窗口漂浮在桌面上方但位于其他所有内容后面

objective-c - 在自定义 View 中重现 tableView 委托(delegate)行为

objective-c - 从 OS X 授权插件访问钥匙串(keychain)项目时出错

objective-c - 为什么我可以更改这个 const NSMutableSring?