Cocoa应用设计建议

3
我有一个Mac应用程序需要基于多个模块构建。也就是说,一个窗口内包含多个视图,并且默认视图带有菜单。该菜单应打开默认窗口上的一个模块,然后如果我选择另一个模块,则窗口内容应更改为另一个视图。这些视图还具有不同的状态,因此我为每个模块制作了多个视图。
简而言之,我的应用程序是单个AppDelegate.h/.m、单个xib文件,其中包含一个NSWindow对象和多个NSView视图。这些视图具有不同的状态,因此我加载了不同的相关NSView
要加载视图,我使用[window setContentView:viewNameView];,我知道这会导致旧的NSView失去状态,因此我需要为每个模块将它们全部保存在内存中。
这种方法正确吗?
谢谢!
3个回答

2
您没有描述菜单的位置和方式,但是一个广泛使用的方法是在左侧设置源列表,在右侧设置内容。您可以在包括苹果自己的应用程序中看到这种方法。
如果您在窗口左侧创建一个源列表并在右侧放置一个NSBox。
将源列表(NSOutlineView)设置为响应- outlineViewSelectionDidChange:,这是一个NSOutlineView委托方法。
在此处,您可以检查菜单中所选项目的标识符,并使用- setContentView:相应地设置NSBox的内容视图:
这里有一个很棒的介绍如何使用NSOutlineViews的视频,供感兴趣的人参考。 编辑:根据您拥有的视图数量,可能更容易使用NSTabView(在无表格模式下),并在- outlineViewSelectionDidChange:方法中切换选项卡。这也是广泛使用的方法,用户不会看到任何区别。

2

1

是的,这样做可以。您可能还需要自定义导航控制器,因为Cocoa没有NSNavigationController,所以您需要自己编写。但基本上,您将使用下一个要显示的视图替换contentView,并保留您已导航到的视图的堆栈,以便支持返回(或者您可以使用字典添加转换键来创建强链接转换)

这里是一个之前的帖子中某人发布的很好的例子-如果您只搜索Cocoa Mac Navigation Controller,应该会找到一些有用的结果:)

Mac OS X Cocoa multiview application navigation

另一件您可能需要牢记的事情是,如果您的视图大小不同。如果是这样,而您正在使用自动布局,则需要更新约束以适当地调整窗口大小,因为视图被交换出去。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接