- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很难理解如何使用 Interface Builder 和 NSViewController 加载 View 。
我的目标是拥有一个满足以下描述的 View :顶部的顶栏(类似于工具栏,但不完全一样)跨越 View 的整个宽度,下面是第二个“内容 View ”。该复合 View 由我的 NSViewController
子类拥有。
为此使用 Interface Builder 是有意义的。我创建了一个 View Nib ,并向其中添加了两个 subview ,并正确放置了它们(带有顶部栏和内容 View )。我已将 File's Owner
设置为 MyViewController
,并连接了 socket 等。
我希望加载的 View (栏和内容)也在它们自己的 Nib 中(这可能是让我绊倒的原因),并且这些 Nib 将其自定义类设置为相应的 NSView 子类(如果适用)。我不确定将什么设置为他们的文件所有者
(我猜测MyController
,因为它应该是他们的所有者)。
唉,当我初始化 MyViewController
的实例时,我的 Nib 实际上都没有显示。我已经将它正确添加到我的 Window 的 contentView 中(我已经检查过其他情况),实际上,事情已经加载了。也就是说,awakeFromNib
被发送到栏 View ,但它不会显示在窗口中。我想我肯定在某个地方交叉了一些电线。也许有人可以伸出援手来缓解我的一些挫败感?
编辑一些代码来显示我在做什么
当我的应用程序完成启动时, Controller 将从应用程序委托(delegate)加载:
MyController *controller = [[MyController alloc] initWithNibName:@"MyController" bundle:nil];
[window setContentView:[controller view]];
然后在我的 initWithNibName 中,我现在除了调用 super 之外什么都不做。
最佳答案
将每个 View 分解为自己的 Nib 并使用 NSViewController 时,典型的处理方法是为每个 Nib 创建一个 NSViewController 子类。然后,每个相应 nib 文件的文件所有者将设置为该 NSViewController
子类,并且您将 view
导出连接到 nib 中的自定义 View 。然后,在控制主窗口内容 View 的 View Controller 中,实例化每个 NSViewController
子类的实例,然后将该 Controller 的 View 添加到您的窗口中。
一段简短的代码 - 在此代码中,我调用主要内容 View Controller MainViewController
,“工具栏”的 Controller 是 TopViewController
,并且其余内容是 ContentViewController
//MainViewController.h
@interface MainViewController : NSViewController
{
//These would just be custom views included in the main nib file that serve
//as placeholders for where to insert the views coming from other nibs
IBOutlet NSView* topView;
IBOutlet NSView* contentView;
TopViewController* topViewController;
ContentViewController* contentViewController;
}
@end
//MainViewController.m
@implementation MainViewController
//loadView is declared in NSViewController, but awakeFromNib would work also
//this is preferred to doing things in initWithNibName:bundle: because
//views are loaded lazily, so you don't need to go loading the other nibs
//until your own nib has actually been loaded.
- (void)loadView
{
[super loadView];
topViewController = [[TopViewController alloc] initWithNibName:@"TopView" bundle:nil];
[[topViewController view] setFrame:[topView frame]];
[[self view] replaceSubview:topView with:[topViewController view]];
contentViewController = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:nil];
[[contentViewController view] setFrame:[contentView frame]];
[[self view] replaceSubview:contentView with:[contentViewController view]];
}
@end
关于cocoa - NSViewController 和 Nib 中的多个 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726250/
您好,我在将数据发送到 NSSplitViewController 时遇到问题。看起来不像IOS开发那样工作。 第一个 Controller : class LoginController: NSVi
我正在将游戏从 iOS 移植到 MacOS。我知道 Apples Catalyst 是一种选择,但我不想走这条路,因为如果通过触摸或鼠标控制,它会对我的用户界面产生巨大的影响。 在 iOS 中,我在旧
我有一个问题,我已经尝试解决很长一段时间了。还提供了项目文件。 所以我有以下想法,有一个带有按钮的侧边栏,当单击按钮时,它仅切换右侧内容。 我最初创建的项目只有 1 个 Storyboard。 Win
我一直在尝试在 NSPopover 内创建从一个 subview Controller 到另一个 subview Controller 的滑动过渡。 我的问题是 subview Controller
我在使用 Xcode 时遇到了一个愚蠢的问题。有时 - 我不知道为什么,因为我总是遵循相同的过程 - 如果我从 NSViewController 的 nib 文件创建一个 IBAction 到此 NS
我的主应用菜单中有一个菜单项,我想将其操作路由到 View Controller (NSViewController)。界面层次结构如下所示:有一个由 NSWindowController 组成的主应
因此,我将 NSViewController 作为一张禁用了调整大小的窗口呈现。 以工作表形式呈现的 View Controller 仍然可以调整大小。 如何禁用 NSViewController 的
我对 MAC OSX 应用程序开发很陌生。 在我的应用程序中,我有三个 NSViewController,它们是 PracticeController、NoteController 和 Questio
我是 cococa 和 swift 的新手,我想创建一个自定义 ViewController。 class StatusUpdate : NSViewController { @IBOutlet
我是 macOS 开发的新手,我正在使用 Xcode 10 和 Swift 4.2 为 macOS 开发一个项目。 该项目主要包含 3 个 View Controller 。 首先,ViewContr
我对 Windows 与 View Controller 的所有权以及它们何时发布有疑问。我创建了一个测试项目,只在 NSViewController 中添加了一行代码: deinit { print
让我从头告诉你,我有这个初始 View Controller 。从那里我转到主页 View Controller ,通过从初始 View Controller 呈现它,然后我在初始 View Cont
我正在尝试学习 Swift,但我似乎陷入了这个(不可否认,可能非常简单)问题 - 错误如下: Could not connect action, target class NSViewControll
我一直在为 OS X 开发一个小图片上传菜单栏应用程序。我为上传的项目创建了自定义 NSView 子类。 这是默认情况下的样子: 鼠标事件由 View 的 NSViewController 按以下方式
我正在开发一个 OSX 应用程序,如果用户尚未登录,我会首先显示一个登录/注册窗口。 登录成功后,我会显示我的主视图 Controller 。 如果用户已经登录(存储 token ),则应用程序必须直
总结: 使用 Cocoa 的内置用户界面保存机制,在我的 NSViewController 中保存/恢复 NSSearchField 状态的正确方法是什么? 详细信息: 我正在开发我的第一个 macO
我正在构建一个 cocoa 应用程序,其中包含一个带有 xib 的主窗口 Controller 。该 xib 包含许多自定义 View 类。我想向 xib 添加一个 NSViewController,
我正在尝试弄清楚如何在 NSViewController 中重新加载数据。 我有一个这样的项目,左侧栏是 NSOutlineView (由我的outlineViewController控制),右侧
我来自 iOS 世界,其中 viewDidAppear、viewDidDisappear 对于跟踪用户何时切换到另一个 View 或从该 View 返回非常有用。 跟踪与 NSViewControll
我想在 cocoa MAC 应用程序开发中交换 View ,例如 UINavigationController 在 cocoa touch 中的推送/弹出 View 。它是应用程序对推送和弹出 Vie
我是一名优秀的程序员,十分优秀!