问题标签 [nsviewcontroller]

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 投票
2 回答
3154 浏览

cocoa - Mac OS X 上的 Cocoa 应用程序架构

经过长时间的 iPhone 工作后,我将重新开始在 Mac 上进行 Cocoa 开发。我之前在 Mac 上使用 Cocoa 的经验只是一些极小的工具。我正在寻找建立一些严肃的东西。

看看像 iPhoto(或 Mail 或 Things 或....)这样的现代 Cocoa 应用程序,许多应用程序使用单窗口、基于源列表的方法。我正在尽力解决这个问题,因为它似乎提供了很好的体验。但是,我遇到了一些麻烦。这是我认为它应该看起来的样子,但我想知道其他人是如何做到的,以及真正最好的方法是什么:

  • 应用程序的起点是一个 AppDelegate 对象,该对象在启动后会从 nib 创建一个 Window[Controller?] 并设置其数据(例如来自 CoreData)

  • WindowController 加载一个窗口,其中基本上只有一个 NSSplitView。

  • splitview 的左侧有一个设置为 SourceList 样式的 NSTableView 或 NSOutlineView。

  • 右侧是应用程序的主要内容,取决于选择了表格视图的哪个项目。

我会假设某处(在哪里?)有 NSViewControllers 管理将出现在右侧的每个不同视图(想想 iPhoto 如何拥有所有照片、事件、面孔、地点等,我想它们都可以出现在不同的笔尖... 它是否正确?)。

那些视图控制器可能绑定到左侧的源列表......这是如何工作的(源列表可能由 NSViewControllers 的 NSArrayController 支持?)。

无论如何,这些是我的想法,我是完全脱离基地还是......?我浏览了网络,在这里找到了这篇文章,并且查看了一些 Apple 源代码,但我似乎无法理解它。欢迎任何指导。

0 投票
3 回答
2040 浏览

objective-c - 在视图控制器中处理发送给第一响应者的消息

我一定错过了一些简单的东西,但我看不到它。首先,设置:

  • DATreeView, 的一个子类NSView
  • DATreeViewController, 的一个子类NSViewController
  • MainMenu.xib有一个 的实例DATreeViewController,它被配置为从DATreeView.xib
  • MainMenu.xib还有一个 的实例DendreaAppDelegate,它有一个DATreeViewController插座(连接到MainMenu.xib' 的DATreeViewController实例。
  • Do Something!,一个连接起来的菜单项,用于向doSomething:第一响应者发送消息。
  • 并非巧合,DATreeViewController有一个动作叫doSomething:.

我想要的是Do Something!菜单项触发doSomething:操作DATreeViewController,让我们假设我不能直接设置目标/操作连接。我会在这里停下来问,我的设计完全错误吗?我正在尝试做的事情是愚蠢/邪恶/可能在我的上帝眼中让我感到羞耻吗?

不?伟大的。现在,对于我的生活,我无法让菜单项处于活动状态。我在 Snow Leopard 上这样做,如果这有什么不同的话。

为了实现NSView和之间的良好集成NSViewController,例如管理响应者链,我遵循了Matt Gallagher 的示例,进行了一项实质性更改:在 NIB 加载过程中NSView似乎没有收到setViewController:消息,所以我自己发送该消息DATreeViewControllerloadView讯息。据我所知,在运行以下代码后applicationDidFinishLaunching:

响应者链按预期设置,即:

我的期望是,作为DATreeViewController响应者链的一部分,作为响应者链的一部分,作为响应者doSomething:,并且因为它不实现验证,我所要做的就是使用 Interface Builder 将Do Something!菜单项连接到 First Responder 代理,doSomething:作为其操作,菜单项将自动激活。

我究竟做错了什么?感谢大家的宝贵帮助!

0 投票
3 回答
915 浏览

objective-c - 如果不使用 NSViewController 与 10.4 兼容,你会怎么做?

我需要做的就是在窗口的 NSView 中加载和交换一些 nib。我知道如何使用 NSViewController 做到这一点,并让它与 10.5-10.6 完美配合,但我不知道如何为 10.4 做些什么。

教程链接非常受欢迎,我很难找到遗留的东西。

(是的,我确实需要支持 10.4。)

0 投票
2 回答
18440 浏览

cocoa - NSViewController 和来自 Nib 的多个子视图

我很难集中精力使用 Interface Builder 和 NSViewController 加载视图。

我的目标是拥有一个满足以下描述的视图:顶部的顶部栏(像工具栏但不完全一样)跨越视图的整个宽度,以及下面的第二个“内容视图”。这个复合视图归我的NSViewController子类所有。

为此使用 Interface Builder 是有意义的。我创建了一个视图笔尖,并向其中添加了两个子视图,将它们正确布局(使用顶部栏和内容视图)。我已经设置File's Owner好了MyViewController,并连接了插座等。

我希望加载的视图(栏和内容)也在它们自己的笔尖中(这可能是让我绊倒的原因),并且这些笔尖将它们的自定义类设置为相应的 NSView 子类(如果适用)。我不确定要设置什么File's Owner(我猜MyController应该是他们的所有者)。

唉,当我初始化一个MyViewController我的笔尖都没有实际显示的实例时。我已经将它正确地添加到我的窗口的 contentView 中(我已经检查过),实际上,事情有点加载。也就是说,awakeFromNib被发送到条形视图,但它不会显示在窗口中。我想我肯定有一些电线交叉在某个地方。也许有人可以伸出援助之手来减轻我的一些挫败感?

编辑一些代码以显示我在做什么

当我的应用程序完成启动时,从应用程序委托加载控制器:

然后在我的 initWithNibName 中,我现在什么也不做,只是打电话给 super 。

0 投票
1 回答
1784 浏览

cocoa - 使用 NSViewController 加载 nib 后...如何访问 nib 中的 NSButton?

我已经将 NSViewController 子类化,并将 IBOutlets 连接到辅助笔尖中的 NSButton 中。

我可以实例化 NSViewController 并在 NSMenu 中应用视图——效果很好——但是如何访问按钮来更改其标题?

由于 NSViewController 有 IBOutlets,我假设我会通过控制器来执行此操作。

关于从这里去哪里的任何指示?

编辑添加: toDoViewController 类——

0 投票
2 回答
675 浏览

objective-c - 自我窗口内的 NSView

我有基本的 *.xib 文件,其中有 NSView。

如何为此自定义视图使用其他 nib 文件?什么是 NSViewController,我应该如何使用它?

0 投票
1 回答
403 浏览

objective-c - 将 CoreData 内容传递给 NSViewController

我已经开始使用 NSViewControllers,但我一生都无法弄清楚如何通过 NSViewController 将内容从 CoreData 实体获取到 TableView(例如)?

0 投票
1 回答
284 浏览

cocoa - 为什么“添加子视图”不起作用?

我尝试添加子视图但不起作用。我的代码是:

NSLog 在控制台中写入:

为什么 addsubview 不起作用?当我运行我的应用程序时,会出现 HomeView,但我不能将其用作子视图。

0 投票
2 回答
2641 浏览

core-data - 在单个窗口界面中跨多个视图控制器绑定选择

我在思考如何在两个视图控制器之间连接几个 NSArrayControllers 时遇到了问题。我想同步源列表视图中的选择以更新第二个详细视图控制器中的值。

我使用Cocoa Dev Central Build A Core Data Tutorial作为起点,但是已经分解了架构,因此有一个包含两个 NSViewControllers 的 NSWindowController:一个用于左侧的帖子表,一个用于帖子的详细信息正确的。

NSWindowController 子类有一个绑定到 Post 实体的 NSArrayController 和一个只读的 managedObjectContext 访问器,它指向[[NSApp delegate] managedObjectContext]

然后我在方法中初始化两个视图控制器windowDidLoad

MDVCPostsListViewController有一个 NSArrayController 绑定到 Post 实体,它的托管对象上下文绑定到父窗口控制器的托管对象上下文(全部通过 Interface Builder)

MDVCPostDetailViewController有一个 NSObjectController 绑定到窗口控制器的托管对象上下文,并且内容对象通过postsListsViewController.postsArrayController.selection. 这似乎是一个非常糟糕的黑客攻击。

我怎样才能得到它,以便更改MDVCPostsListViewController表视图中的选择将更新中的选定值MDVCPostDetailViewController?我觉得我很接近,但不确定缺少什么或最佳路线是什么。我确实觉得postsListsViewController.postsArrayController.selection绑定非常hacky。希望有更好的方法。

我已经上传了我的示例项目,它为那些喜欢查看代码而不仅仅是阅读描述的人展示了这一点。您可以从我的网站http://www.secondgearsoftware.com/attachments/stackoverflow_objectcontroller.zip获取它

0 投票
1 回答
1504 浏览

cocoa - 如何显示从单独的 NIB 文件加载的子视图

我正在开发一个使用 iTunes 风格的源列表的 Cocoa 桌面应用程序:源列表中的不同元素导致主要内容区域显示不同的视图。

内容区域完全由 (vertical) 填充NSSplitView;左侧是NSOutlineView源列表。当用户选择左侧的项目时,相关视图会出现在拆分器的右侧。

NSTabView我可以通过将所有内容放在一个 NIB 文件中并在拆分器的右侧放置一个无边框来使其工作得足够好;要切换视图,我只需要更改选定的选项卡。但是将所有视图放在一个 NIB 中是不好的做法,所以我试图将每个子视图移动到它们自己的 NIB 文件中。

我对这个过程的大部分都有一个很好的想法——我NSViewController为每个视图创建了一个子类(EntityDetailViewControllerGroupDetailViewController等),将每个新 NIB 的文件所有者设置为相关的控制器类,view在每个视图中设置连接NIB,并重新设计了绑定。我不知道如何实际更改屏幕上显示的子视图。

我尝试使用NSView右侧的默认泛型并向其发送addSubview:消息;我尝试将其作为第一个子视图连接并调用

但一切都只是让空间空白。如何显示从单独的 NIB 加载的子视图?