问题标签 [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.
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 源代码,但我似乎无法理解它。欢迎任何指导。
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:
消息,所以我自己发送该消息DATreeViewController
的loadView
讯息。据我所知,在运行以下代码后applicationDidFinishLaunching:
响应者链按预期设置,即:
我的期望是,作为DATreeViewController
响应者链的一部分,作为响应者链的一部分,作为响应者doSomething:
,并且因为它不实现验证,我所要做的就是使用 Interface Builder 将Do Something!
菜单项连接到 First Responder 代理,doSomething:
作为其操作,菜单项将自动激活。
我究竟做错了什么?感谢大家的宝贵帮助!
objective-c - 如果不使用 NSViewController 与 10.4 兼容,你会怎么做?
我需要做的就是在窗口的 NSView 中加载和交换一些 nib。我知道如何使用 NSViewController 做到这一点,并让它与 10.5-10.6 完美配合,但我不知道如何为 10.4 做些什么。
教程链接非常受欢迎,我很难找到遗留的东西。
(是的,我确实需要支持 10.4。)
cocoa - NSViewController 和来自 Nib 的多个子视图
我很难集中精力使用 Interface Builder 和 NSViewController 加载视图。
我的目标是拥有一个满足以下描述的视图:顶部的顶部栏(像工具栏但不完全一样)跨越视图的整个宽度,以及下面的第二个“内容视图”。这个复合视图归我的NSViewController
子类所有。
为此使用 Interface Builder 是有意义的。我创建了一个视图笔尖,并向其中添加了两个子视图,将它们正确布局(使用顶部栏和内容视图)。我已经设置File's Owner
好了MyViewController
,并连接了插座等。
我希望加载的视图(栏和内容)也在它们自己的笔尖中(这可能是让我绊倒的原因),并且这些笔尖将它们的自定义类设置为相应的 NSView 子类(如果适用)。我不确定要设置什么File's Owner
(我猜MyController
应该是他们的所有者)。
唉,当我初始化一个MyViewController
我的笔尖都没有实际显示的实例时。我已经将它正确地添加到我的窗口的 contentView 中(我已经检查过),实际上,事情有点加载。也就是说,awakeFromNib
被发送到条形视图,但它不会显示在窗口中。我想我肯定有一些电线交叉在某个地方。也许有人可以伸出援助之手来减轻我的一些挫败感?
编辑一些代码以显示我在做什么
当我的应用程序完成启动时,从应用程序委托加载控制器:
然后在我的 initWithNibName 中,我现在什么也不做,只是打电话给 super 。
cocoa - 使用 NSViewController 加载 nib 后...如何访问 nib 中的 NSButton?
我已经将 NSViewController 子类化,并将 IBOutlets 连接到辅助笔尖中的 NSButton 中。
我可以实例化 NSViewController 并在 NSMenu 中应用视图——效果很好——但是如何访问按钮来更改其标题?
由于 NSViewController 有 IBOutlets,我假设我会通过控制器来执行此操作。
关于从这里去哪里的任何指示?
编辑添加: toDoViewController 类——
objective-c - 自我窗口内的 NSView
我有基本的 *.xib 文件,其中有 NSView。
如何为此自定义视图使用其他 nib 文件?什么是 NSViewController,我应该如何使用它?
objective-c - 将 CoreData 内容传递给 NSViewController
我已经开始使用 NSViewControllers,但我一生都无法弄清楚如何通过 NSViewController 将内容从 CoreData 实体获取到 TableView(例如)?
cocoa - 为什么“添加子视图”不起作用?
我尝试添加子视图但不起作用。我的代码是:
NSLog 在控制台中写入:
为什么 addsubview 不起作用?当我运行我的应用程序时,会出现 HomeView,但我不能将其用作子视图。
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获取它
cocoa - 如何显示从单独的 NIB 文件加载的子视图
我正在开发一个使用 iTunes 风格的源列表的 Cocoa 桌面应用程序:源列表中的不同元素导致主要内容区域显示不同的视图。
内容区域完全由 (vertical) 填充NSSplitView
;左侧是NSOutlineView
源列表。当用户选择左侧的项目时,相关视图会出现在拆分器的右侧。
NSTabView
我可以通过将所有内容放在一个 NIB 文件中并在拆分器的右侧放置一个无边框来使其工作得足够好;要切换视图,我只需要更改选定的选项卡。但是将所有视图放在一个 NIB 中是不好的做法,所以我试图将每个子视图移动到它们自己的 NIB 文件中。
我对这个过程的大部分都有一个很好的想法——我NSViewController
为每个视图创建了一个子类(EntityDetailViewController
、GroupDetailViewController
等),将每个新 NIB 的文件所有者设置为相关的控制器类,view
在每个视图中设置连接NIB,并重新设计了绑定。我不知道如何实际更改屏幕上显示的子视图。
我尝试使用NSView
右侧的默认泛型并向其发送addSubview:
消息;我尝试将其作为第一个子视图连接并调用
但一切都只是让空间空白。如何显示从单独的 NIB 加载的子视图?