gpt4 book ai didi

cocoa - 在 OS X 上,将 GUI 分成多个 NIB 文件和 NSView 子类

转载 作者:行者123 更新时间:2023-12-03 16:25:40 25 4
gpt4 key购买 nike

我正在开发一个 OS X/Cocoa 应用程序,我想要这样的行为:

  • 侧边栏包含不同的选项,例如“选项 A”、“选项 B”和“选项 C”。
  • 当您单击 A、B 或 C 时,它会将相应的 GUI 加载到主 Pane 中。每个 GUI 都是不同的 NSView 子类,并且在不同的 NIB/XIB 文件中定义。例如,选项 A 可能有 3 个按钮,并且是 NSViewSubclassA 的实例,而选项 B 可能有 1 个按钮和一个文本字段,并且是 NSViewSubclassB 的实例。

我该如何进行编程?

最佳答案

首先对 NSViewController 进行子类化,这样每个 subview 都有一个 Controller 。在您的操作方法中,当用户单击按钮在 View 之间切换时,您可以使用适当的类和 nib 创建一个新的 View Controller (在窗口 Controller 的 ivar 中保留对其的引用)。 View Controller 充当 Nib 的所有者。然后您所要做的就是将 View Controller 的 View 添加为主窗口中的 subview ,然后就完成了。

这是一个简单的例子。在执行一些不相关的任务后,这是在主窗口 Controller 中从操作方法(以及启动后)调用的;唯一棘手的部分是修补响应者链(如果幸运的话,您可能不需要这样做)。

- (void)_setAccessoryViewControllerFromTag:(NSInteger)tag;
{
if ( _accessoryContentViewController != nil )
{
[self setNextResponder:[_accessoryContentViewController nextResponder]];
[_accessoryContentViewController release];
}

switch ( tag )
{
case 0:
_accessoryContentViewController = [[RLGraphsViewController alloc] initWithNibName:@"GraphsView" bundle:nil];
break;
case 1:
_accessoryContentViewController = [[RLSummaryViewController alloc] initWithNibName:@"SummaryView" bundle:nil];
break;
case 2:
_accessoryContentViewController = [[RLEquipmentViewController alloc] initWithNibName:@"EquipmentView" bundle:nil];
break;
default:
_accessoryContentViewController = [[RLLocationsViewController alloc] initWithNibName:@"LocationsView" bundle:nil];
break;
}

[_accessoryContentViewController setNextResponder:[self nextResponder]];
[self setNextResponder:_accessoryContentViewController];
[self.accessoryView setContentView:[_accessoryContentViewController view]];
}

关于cocoa - 在 OS X 上,将 GUI 分成多个 NIB 文件和 NSView 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com