问题标签 [nsstoryboard]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
506 浏览

macos - 如何在情节提要上使用 NSPageController?

在情节提要上,当我尝试添加NSPageController时,它会出现自己的视图。

当我想使用拆分视图时,我可以添加一个NSSplitViewController或仅添加一个拆分视图。我更喜欢在NSViewController.

无论如何我可以在NSPageController里面使用NSViewController然后选择一个子视图作为我的NSPageController内容吗?Storyboard 只是不允许我将 PageController 放在 View Controller 中。有任何想法吗?

0 投票
1 回答
272 浏览

objective-c - 如何使用 Storyboard 将对象从 AppDelegate 传递到 WindowController?

在我的应用程序委托中,我创建了一个NSManagedObjectContext我想传递给我在其中启动的窗口控制器的属性applicationDidFinishLaunching:

这基本上是我的代码AppDelegate.m

MyWindowController.m我有以下方法:

这是一种方法MyViewController.m

这种方法效果很好,直到我不得不从应用程序委托以编程方式启动不同的窗口。现在的问题是,prepareForSegue:sender:在我能够设置之前调用初始视图MyWindowController.managedObjectContext,所以它只会通过nil以下segues。

在设置视图层次结构之前,我到底应该如何将对象从我的应用程序委托传递到初始窗口控制器?

我是否以错误的方式接近这一切?

0 投票
3 回答
1176 浏览

swift - 通过 OS X 故事板中的标识符实例化拆分视图控制器不会加载视图层次结构

我正在尝试在 Swift OS X 应用程序中实现主-细节-细节视图。顶层视图控制器是一个带有三个子视图控制器的 NSSplitViewController。主视图和第一个细节视图是相当标准的,具有固定的行为。第二个详细视图需要根据第一个详细视图中的选择进行更改。

第二个细节控制器是一个简单的视图控制器,它将通过根据选择安装新的子视图和控制器来响应第一个细节视图中的选择变化。

最终内容的替代视图控制器在同一个故事板中实现,没有通过 segue 连接到任何东西;目的是使用 -[NSStoryboard instantiateControllerWithIdentifier:] 创建它们并将它们安装为子视图控制器和子视图。

实例化的视图控制器恰好是 NSSplitViewControllers。

这是问题所在:当我实例化详细拆分视图控制器并安装它们时,它们是空的。到目前为止,我能够观察到的是:

  • 实例化的视图控制器属于正确的类(NSSplitViewController 的子视图);
  • 他们没有子视图
  • 他们确实有 splitViewItems,而 splitViewItems 是我希望看到加载的视图控制器

我需要做些什么来完全加载/填充加载的拆分视图控制器吗?

TIA,道格

0 投票
2 回答
1600 浏览

objective-c - Mac OSX Storyboard:NSViewController 之间的通信

我在 OS X 可可应用程序项目中使用情节提要,其中有一个 SplitView 控制器和另外 2 个视图控制器 LeftViewController 和 RightViewController。

在 LeftViewController 我有一个显示名称数组的 tableView。tableview 的数据源和委托是 LeftViewController。

在 RightViewController 中,我只有一个显示选择名称的居中标签。我想在右视图中显示在左视图中选择的名称。

要配置 2 个视图控制器之间的通信,我使用 AppDelegate 并在 AppDelegate.h 中为每个控制器定义 2 个属性。这 2 个属性在视图控制器的 viewDidLoad 中使用 NSInvocation 进行初始化:

我在 LeftViewController 中也有同样的情况。

然后,如果我单击表视图中的名称,我会向代理发送一条消息,其中包含参数中的名称,并且代理会使用给定名称更新 RightViewController 的标签。它工作正常,但根据苹果的最佳实践,它并不好。

是否有另一种方式在情节提要内的 2 个视图控制器之间进行通信?

我已经阅读了很多帖子,但没有找到 OS X 的内容。

您可以在这里下载简单的项目:http ://we.tl/4rAl9HHIf1

视图控制器之间的通信

0 投票
3 回答
5382 浏览

swift - Dismiss ViewController 不会释放内存

我遇到了一个与内存相关的问题,也就是说,每当我去(segue)到第二个视图然后返回(关闭)时,内存就会不断堆积。

我的第二个 viewController 中有以下代码。但是,它不会释放内存。

提前致谢。

0 投票
1 回答
612 浏览

swift - NSToolbar 中的 NSSearchField 和 NSSegmentedControl

设置:

我正在使用情节提要编写针对 OS X 10.11 的基于文档的应用程序。主窗口有NSToolbar一个 3-segment NSSegmentedControl。单击分段控件时,它应该将折叠状态切换为NSSplitViewItem水平或垂直NSSplitView。我试图实现的行为与 Xcode 7 中的行为相同,其中工具栏中的分段控件显示/隐藏导航器/调试区域/实用程序视图。

当前,分段控件向第一响应者发送操作。action 方法由一个NSSplitViewController子类实现,然后切换它的NSSplitViewItem折叠状态。

问题:

问题是工具栏还包含一个NSSearchField. 如果NSSearchField具有焦点,或者即使分段控件本身具有焦点,则NSSegmentedControl使用光标单击 不会导致操作方法正确地使其沿着响应程序链向上到达NSSplitViewController子类。

尝试的解决方案:

以前我使用通知而不是目标/操作来解决这个问题,但最终结果过于复杂。另一个想法是将消息发送到窗口控制器,然后将其传递给它的内容视图控制器,它会将它传递给垂直拆分视图控制器,然后将消息(如果需要)发送到水平拆分视图控制器。虽然我知道这会起作用,但它似乎也是一个丑陋的解决方案,必须将代码添加到 2 个简单地传递消息的附加文件中,我认为这是使用响应者链避免的。

任何见解将不胜感激。

最终解决方案:

我意识到只有在关键视图上下文很重要的情况下,将分段控件的操作连接到第一响应者才有意义。在这种情况下,分段控件应该在多个嵌套拆分视图中切换拆分视图项的折叠状态,而不管关键视图是什么。

定义一个枚举来表示拆分视图的区域:

定义一个协议来传达应该切换拆分视图区域:

在窗口控制器中实现分段控制动作方法:

SplitViewTogglable在 NSSplitViewController 子类中实现协议的方法:

0 投票
1 回答
80 浏览

macos - NSSplitView 与其父视图之间的高度差距——它来自哪里?

我正在使用 Storyboards 构建一个 OS X 应用程序。它的安排使我的主窗口控制器包含一个 NSSplitViewController 作为其内容视图控制器。

但是,有时,当我打开应用程序时,拆分视图的顶部和窗口标题栏的底部之间存在间隙:

有差距的应用

一旦我调整窗口大小,这个差距就会消失。

我捕获了视图层次结构,并看到了这些自动布局约束。其中一个特别有趣:

查看调试器

有趣的!但是我在我的应用程序中找不到任何指定这些自动布局约束的地方,无论是在窗口中还是在拆分视图中。

一旦窗口调整大小,约束看起来像这样(这是在 NSThemeFrame 上):

在此处输入图像描述

如果我从 NSSplitView 中查看约束,它不会变灰:

在此处输入图像描述

22 的差异是有道理的;这是标题栏本身的高度。

我能做些什么来找出是什么让它表现得像这样?

0 投票
2 回答
87 浏览

objective-c - NSDocument init 未在情节提要的拆分视图控制器的一个窗格中调用

我有一个可以工作的基于文档的应用程序。

我添加了一个NSSplitViewController,将故事板入口点指向它,将文档的视图控制器移动到拆分视图控制器中的窗格,并将文档的视图移动到拆分视图控制器的视图之一。另一个拆分视图控制器视图将包含不属于文档的信息,但将用作用户可以添加到文档中的信息源。

一切似乎都很好,除了我的文档的init方法从未被调用过。我对故事板的应用程序初始化过程了解不够,无法解决这个问题。

有什么建议么?

0 投票
2 回答
1838 浏览

objective-c - 故事板不包含标识符为“MainWindow”的控制器

我正在尝试NSWindowController从我的 OS X 应用程序中的情节提要中实例化一个:

NSWindowController *mainWindowController = [[NSStoryboard storyboardWithName:@"Main" bundle:nil] instantiateControllerWithIdentifier:@"MainWindow"];

但这就是我得到的:

Storyboard (<NSStoryboard: 0x618000008500>) doesn't contain a controller with identifier 'MainWindow'.

但在故事板中:

在此处输入图像描述

它已设置。不,没有其他故事板。是的,我已经尝试清理项目和构建文件夹,但没有任何变化。

为什么我会收到此错误?

更新:我正在构建我的应用程序,回到情节提要,我看到情节提要 ID 未设置:

在此处输入图像描述

Storyboard ID 如何自行取消设置?

0 投票
3 回答
744 浏览

macos - 带有故事板的基于文档的应用程序自动保存

在基于文档的应用程序中,使用 XIB 文件,当创建一个新窗口时,它的行为是:

  1. 根据最后一个活动窗口的位置定位和调整大小。
  2. 如果最后一个活动窗口仍然可见,那么新窗口应该被级联,这样它就不会直接重叠。

但是,当使用情节提要时,这还没有完成。请参阅测试项目