如何制作基于模块化 NSViewController 的公开视图,其中所有公开的视图都包含在它们自己的 NIB 中?
Posted
技术标签:
【中文标题】如何制作基于模块化 NSViewController 的公开视图,其中所有公开的视图都包含在它们自己的 NIB 中?【英文标题】:How to make a modular NSViewController based disclosure view where all disclosed views are contained in their own NIB? 【发布时间】:2014-01-19 08:47:28 【问题描述】:在 real 应用程序中,视图层次结构可能很复杂,这确实有助于将不同的视图放在不同的 nib 中。我正在关注InfoBarStackView example project,他们提供了一个非常好的示例,说明如何使用托管不同视图的新 NSStackView 类。他们制作了一个DisclosureViewController
,负责托管内容视图
更改它的大小,以便它可以从打开状态变为关闭状态。
这是一个简化的例子。我们拥有的是两个独立的笔尖:
DisclosureViewController
ContentViewController
在公开视图的占位符视图中加载内容视图的最简单方法是什么?是否只能在 IB 中执行此操作?
目前我的 AppDelegate 有很多冗余,因为它需要保存对两个视图控制器的引用。我想知道是否有办法简化这种情况?对于这个简单的示例,AppDelegate 将使用这样的代码从两个不同的 nib 加载,
// In AppDelegate.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
[_disclosureView1.view replaceSubview:_disclosureView1.placeholder with:_contentView1.view];
[(NSView*)_window.contentView addSubview:_disclosureView1.view];
【问题讨论】:
实际上没有,从来没有为 ios 编码过,虽然我知道你的意思。 UIViewController 在该平台上被大量使用。 【参考方案1】:您可以在主 XIB 中使用 NSViewControllers 来对应您在 NSStackView 中所需的视图 — 在 XIB 的检查器中,您可以设置它们应该加载的其他 XIB 的名称以获取它们的“视图”。
假设您在主 XIB 中的这些 viewController 上有 IBOutlets,它就像调用一样简单:
/* load the views into the stack view */
_stackView = [NSStackView stackViewWithViews:@[_viewControllerOutlet1.view, _viewControllerOutlet2.view, _viewControllerOutlet3.view]];
【讨论】:
只需填写带有视图的笔尖的笔尖名称即可。在那个 nib 中,“文件的所有者”应该是 NSViewController 类型的,并且应该连接到视图的出口。 我已经完全重写了这个问题,以便更容易理解我在问什么。很抱歉给您带来了困惑,也许您可以再次发表评论? 酷。我们在 OS X 上遇到的一个大问题是我们不能说“这个 XIB 中的这个视图是来自另一个 XIB 的占位符”,但 AppKit 团队仍然需要解决这个问题。 谢谢!我现在知道了。我会摔倒自己试图弄清楚为什么代码看起来很糟糕,答案(通常情况下)是我正在与可可作斗争。最后,我只需要坚持使用两个控制器。顺便说一句,我在另一个线程github.com/danieljfarrell/InnerShadowTextFieldCell 的建议下写了 InnerShadowTextFieldCell 威尔,您能否澄清一下:如果必须使用该代码来构建堆栈视图,为什么要将控制器放在一个 nib 中?以上是关于如何制作基于模块化 NSViewController 的公开视图,其中所有公开的视图都包含在它们自己的 NIB 中?的主要内容,如果未能解决你的问题,请参考以下文章
MicroPython:基于TPYBoard集合MAX7219点阵模块制作表白女神神器
基于Linux制作驱动过程中需要认识的 ------内核模块