在NSWindow添加向下滑动视图

时间:2014-12-18 07:57:21

标签: macos cocoa appkit

如何在下图中实现视图 在System Preferences > Network中单击 + 按钮时出现的视图 enter image description here


我有以下问题:

  1. 此视图系统是否具有特定名称(如popover),因为我在Mac的许多地方都看到了它。
  2. 如何在IB中实施?
  3. 这可以在popover窗口而不是NSWindow中完成吗?(或者只能在NSWindow中使用工具栏)

1 个答案:

答案 0 :(得分:1)

在Cocoa中,这些被称为纸张。看看sheet programming guide,然而,这已经过时了!

您需要在要显示工作表的窗口上调用-beginSheet:completionHandler:。如果你有单窗口应用程序,你可以向AppDelegate询问窗口并启动这样的表格,

// This code should be in AppDelegate which implement the -window method
NSWindow *targetWindow = [self window]; // the window to which you want to attach the sheet
NSWindow *sheetWindow = self.sheetWindowController.window // the window you want to display at a sheet

// Now start-up the sheet
[targetWindow beginSheet:sheetWindow completionHandler:^(NSModalResponse returnCode) {

        switch (returnCode) {

            case NSModalResponseCancel:
                NSLog(@"%@", @"NSModalResponseCancel");
                break;

            case NSModalResponseOK:
                NSLog(@"%@", @"NSModalResponseOK");
                break;

            default:
                break;
        }
    }];

您会注意到,当工作表完成时,它将返回某个模态响应 - 我们将在短时间内返回到此点。

接下来,您需要实现要在工作表中显示的内容;这必须在NSWindow完成。我发现使用NSWindowController并在单独的XIB文件中实现窗口要容易得多。例如,见下文,

NSWindow containing a items to be displayed in the sheet.

现在你需要在你的自定义NSWindowController 中实现代码(如果你是老派并且喜欢管理你自己的NIB加载,那就是普通的NSWindow),它会发出正确的模态响应。在这里,我将取消和确定按钮连接到以下操作方法,

- (IBAction)cancelButtonAction:(id)sender {
    [[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseCancel];
}

- (IBAction)OKButtonAction:(id)sender {
    [[[self window] sheetParent] endSheet:self.window returnCode:NSModalResponseOK];
}

模型响应将被发送到您的完成处理程序块。

Sample project on github.