我有一个基于 OSX Storyboard的应用程序,它以 NSSplitViewController
开头,如下所示:
这个splitViewController
有两个viewController
:master和detail。
窗口内有一个 NSToolbar
。我将 NSProgressIndicator
拖到该工具栏上,Xcode 将其嵌入到 NSToolbarItem
中。
现在我需要创建一个从 NSProgressIndicator 到某个类的导出(不是其他 stackoverflow 问题中解释的操作)。第一个问题是哪一个?
Xcode 不允许我创建 socket 。我尝试过这些选项:
- 从
ToolbarItem
拖动到masterController
类文件、detailController 类文件和NSSplitViewController
类。 - 从 ToolbarItem 拖动到委托(delegate)类。
- 从
NSProgressIndicator
拖到masterController
类文件、detailController
类文件和NSSplitViewController
类。< - 从 NSProgressIndicator 拖动到委托(delegate)类。
- 从 NSToolbarItem 和 NSProgressIndicator 拖动到窗口 Controller 第一响应程序。
在所有情况下,拖动都不会出现允许我创建 socket 的窗口。
老天啊,我该如何创建这样的导出?我将其拖到哪个类以及如何操作?
最佳答案
我假设您的设置更像是下图:
默认情况下,您的窗口场景由 NSWindowController 支持,您无法向其中添加新的导出。您需要创建它的子类,将其与您的窗口关联,然后您应该能够在其中创建导出。
文件 > 新建文件 > Cocoa 类 指定一个名称,如“SpaceDogsWindowController”,作为 NSWindowController 的子类。
然后使用选择窗口 Controller 图标(蓝色圆圈)并选择 Xcode 中的 Identity Inspector。 (CMD+ALT+3)。在“类(class)”字段中指定新类(class)的名称。
然后尝试连接 socket :
1) 显示助理编辑器
2) 使用跳转栏确保您的自定义类可见(它位于助理编辑器 Pane 的顶部,它应该显示“自动”,您可以点击它来选择您的新类;如果它显示“手动”,将其更改为自动)。
3) 如果您按住 Control 进行拖动,但仍无法建立连接,请尝试从文档大纲中进行拖动(也显示在屏幕截图中)。
然后,您可以使用如下代码从其他 View Controller (这些 View Controller 是该窗口 View 层次结构的后代)编辑该进度指示器:
if let windowController = self.view.window?.windowController() as? CustomWindowController {
windowController.progressIndicator.doubleValue = 0.4
}
或者,在 Objective-C 中,类似这样:
CustomWindowController *myWindowControllerSubclass = self.view.window.windowController;
windowController.progressIndicator.doubleValue = 0.4;
希望有帮助。
关于macos - 在 NSToolbar 内为 NSProgressIndicator 创建一个 socket ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554966/