gpt4 book ai didi

xcode - 如何在 Mac OS 中创建模态滑出窗口?

转载 作者:IT王子 更新时间:2023-10-29 05:10:34 28 4
gpt4 key购买 nike

如何在 Xcode 中创建模态滑出窗口/ View “窗口内”,就像这些屏幕截图中那样?

我已经尝试使用“身份验证面板样式”动画创建新的窗口 Controller ,但随后我只收到 Xcode 崩溃。

modal window

最佳答案

那种模态窗口叫做Sheet。使用 Storyboard segue 或以编程方式使用 NSViewController 子类很容易获得此行为。下面的示例只是一个由 Xcode 创建的空白 OS X Cocoa 应用程序。 (我选择 Swift 作为语言,但它与 Objective-C 的工作方式相同。)

我添加到 Storyboard的唯一内容是工作 TableView 的第二个 View Controller ,以及每个 View 上的标签和按钮。

使用 Storyboard Segue 显示工作 TableView

选择 Sheet View Controller 并显示 Connections Inspector 选项卡后,将“Presenting Segues - sheet”连接到“Display Sheet”按钮。

enter image description here

将“Received Actions - dismissController:”连接到“Close Sheet”按钮。

enter image description here

就是这样!使这个例子工作不需要代码;只需构建并运行即可。


以编程方式显示工作 TableView

请注意,Xcode 使用两个自定义类文件创建默认项目。在 Storyboard 中,AppDelegate.swift 在 Application 场景中表示:

enter image description here

对于此示例,我们不需要使用 AppDelegate,但您可以使用它与主菜单或其他内容进行交互。

自定义 ViewController.swift 自定义类将用于呈现工作表。它在 View Controller 场景中表示:

enter image description here


要以编程方式实例化工作 TableView Controller ,它需要一个 Storyboard ID。在这里,我们将为其指定 ID“SheetViewController”。请注意,它仍然是一个普通的 NSViewController;对于此示例,我们不需要将其设为自定义类,但您的应用程序可能希望:

enter image description here


在辅助编辑器中显示 ViewController.swift 文件,按住 Ctrl 键将连接从“显示表”按钮拖到自定义类中。这将为我们命名为“displaySheet”的@IBAction 函数创建 stub 代码:

enter image description here

ViewController.swift 文件中,我们将 Sheet View Controller 实现为惰性变量。它只会在第一次被访问时实例化一次。这将在第一次调用 displaySheet 函数时发生。

//  ViewController.swift

import Cocoa

class ViewController: NSViewController {

lazy var sheetViewController: NSViewController = {
return self.storyboard!.instantiateControllerWithIdentifier("SheetViewController")
as! NSViewController
}()

@IBAction func displaySheet(sender: AnyObject) {

self.presentViewControllerAsSheet(sheetViewController)
}
}

swift 4 版本:

//  ViewController.swift

import Cocoa

class ViewController: NSViewController {

lazy var sheetViewController: NSViewController = {
return self.storyboard!.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "SheetViewController"))
as! NSViewController
}()

@IBAction func displaySheet(sender: AnyObject) {

self.presentViewControllerAsSheet(sheetViewController)
}
}

与第一个示例一样,“关闭工作表”按钮连接到工作 TableView Controller 上的“dismissController:”操作。或者,您可以从 ViewController 类以编程方式调用该函数:

self.dismissController(sheetViewController)

更多信息请引用Apple“Sheets Programming Topics”文档: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Sheets/Sheets.html

关于xcode - 如何在 Mac OS 中创建模态滑出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426294/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com