标签: nssplitviewcontroller

基于NSSplitViewController的应用程序几乎从不以正确的大小启动

我有这个应用程序使用一个NSSplitViewController作为根,并 NSTabViewController作为其detailViewController连接.

此应用程序将设置为1024x768启动.左侧窗格应以320x768启动,右侧窗格(tabViewController所在的位置)应在704x768处启动.

我运行这个应用程序10次,9次将以不正确的大小(约500x500)启动.其他奇怪的是这个应用程序不应该是可扩展的,但如果你将鼠标悬停在窗口边框附近,你会看到光标指示要缩放.

我希望它以正确的大小启动,并且没有可扩展的选项.

这两个设置都在界面构建器上,但被忽略.

您可以在此处下载演示此问题的示例项目.多次停止并运行项目以查看问题.

我该如何解决这个问题?

macos cocoa nstabviewcontroller nssplitviewcontroller

8
推荐指数
1
解决办法
2468
查看次数

Xcode 7中的NSToolbar使用Storyboards(NSWindowController - > NSSplitViewController)

嗨我已经看过这个问题已经问了几次但是没有明确的答案,所以我为xcode 7和swift2创建了它(这可能会改变一些事情).

我使用Xcode 7和Cocoa OSX Story board + swift2创建了一个项目,所以我的项目开始于一个连接到NSViewController 的NSWindowController(正如预期的那样!).我在我的窗口控制器中添加了一个NSToolbar,并在工具栏中添加了一个NSButton.我将我的NSViewController更改为新的NSSplitViewController之一,它链接到三个NSViewController并水平显示它们的视图 - 使用垂直分隔 - (类似于您在照片应用程序中看到的布局或Yosemite +中的页面).我的最终目标是"我的工具栏"中的按钮显示并隐藏第一个拆分.

这是我的理解,并且我希望实现这一点我应该在NSSplitViewController中创建一个动作,它或多或少地改变了它们在这里工作的方式约束:如何在mac中折叠和展开视图应用?.

然后以某种方式将此操作链接到工具栏中的NSButton ...它恰好位于NSWindowController中(远远超出层次结构中)...

我已经解决了有关NSToolbar和故事板的其他问题,但未能实现我的目标:

  • YouTube视频:Cocoa Programming L17 - NSToolbar是我发现的最接近解决问题的方法,但他的方法不适用于故事板,只创建自己的xib文件.
  • 在这个问题:如何在Xcode 6和Storyboard中使用NSToolBar?一个人建议使用第一个响应器建立链接,并期望在运行时连接所有东西(看起来有点狡猾,而不是苹果实现它的方式,我认为......).第二个人建议在NSWindowController中创建一个视图控制器变量,并从那里操纵它的属性......但同样,有点狡猾.

  • 我在这个问题中看到的最新评论似乎是解决问题的最佳方法(但仍然不如我想的那么好)是将NSObjectController添加到每个场景的停靠点,当场景加载时,设置值对象的另一个secene的控制器.这真的是最好的方式吗?如果是这样,我怎么能实现这个呢?

Apple确实(再次)在WWDC15中提到他们为osx和拥有视图控制器的拆分视图控制器创建了故事板,以便您可以将逻辑和工作移动到特定的视图控制器,因此我期望从在我的拆分视图控制器内部,因为这是需要更改的目标.

有谁知道如何从视图控制器本身实现这一点?我真的无法找到一种方法将ToolBarItem连接到它.

macos nstoolbar swift nssplitviewcontroller xcode7

8
推荐指数
1
解决办法
2243
查看次数

NSToolbarFlexibleSpaceItem 是 Swift 中 NSSplitViewItem 的约束

在此处输入图片说明

几乎所有的 macOS 官方应用都有这个工具栏的功能,NSToolbarItem灵活的空间限制了NSSplitViewItem查看。我首先想到 NSToolbar 上可能有 3 个不同的部分。但它只是一个工具栏。您可以打开 Notes 应用程序并自定义工具栏。

  • 第一个灵活空间被检测到并与第一个拆分视图项一起移动。
  • 第二个灵活空间被检测到并与第二个拆分项一起移动。
  • 其余的将只是普通的灵活空间。
  • 如果只有两个灵活空间,则第二个将充当正常的灵活空间。同样的事情适用于一个和/或灵活的空间。

我想这就是 Apple 配置灵活空间项目的方式。

我发现了这个JWToolbarAdaptiveSpaceItem,但它是可移动的,不能像 Note 应用程序那样用灵活的空间项目替换。

还有另一个stackoverflow的问题(我现在找不到)问到这个问题,但答案是添加不是NSToolbar的假视图和按钮。

因此,有谁知道如何实现这一目标?

(对不起我的英语)

nstoolbar nstoolbaritem swift nssplitviewcontroller swift3

7
推荐指数
1
解决办法
378
查看次数

将 NSToolbarItems 与 NSSplitView 列对齐

Finder 和 Notes 有一种我正在寻求重现的特殊行为。NSToolbar 中的“灵活空间”似乎考虑了拆分视图的尺寸。例如,第一组按钮在侧边栏的左侧与右侧对齐。第二组图标与第一列的右侧对齐。当我加宽侧边栏时,工具栏项目随之移动。

有没有可能重现这个?

在此处输入图片说明


解决方案

使用@KenThomases 提供的解决方案,我实现了如下:

final class MainWindowController: NSWindowController {
    override func windowDidLoad() {
        super.windowDidLoad()
        window?.toolbar?.delegate = self
        // Make sure that tracking is enabled when the toolbar is completed
        DispatchQueue.main.async {
            self.trackSplitViewForFirstFlexibleToolbarItem()
        }
    }
}

extension MainWindowController: NSToolbarDelegate {
    func toolbarWillAddItem(_ notification: Notification) {
        // Make sure that tracking is evaluated only after the item was added
        DispatchQueue.main.async {
            self.trackSplitViewForFirstFlexibleToolbarItem()
        }
    }

    func toolbarDidRemoveItem(_ notification: Notification) {
        trackSplitViewForFirstFlexibleToolbarItem()
    }

    /// - Warning: This is a …
Run Code Online (Sandbox Code Playgroud)

cocoa nssplitview nstoolbar nstoolbaritem nssplitviewcontroller

5
推荐指数
1
解决办法
1480
查看次数

XIB 中的 NSSplitViewController/NSSplitViewItem 支持

XIB 是否支持 NSSplitViewController/NSSplitViewItem?我只看到 NSSplitView

我可以拖放 NSViewController 并将其子类化为 NSSplitViewController 吗?如何添加 NSSplitViewItem 它主要是开箱即用的?

XIB 中的拆分视图控制器

我可以很容易地在故事板中看到对它们的支持。

故事板中的分割视图控制器

macos xcode cocoa xib nssplitviewcontroller

5
推荐指数
1
解决办法
1039
查看次数

使用Swift设置NSSplitViewController窗格的宽度

Xcode 8.2.1,Swift 3.0.2,macOS 10.12

我有一个NSSplitViewController有3个窗格(请注意NS;这是一个Mac应用程序).

我正在尝试将最左侧的窗格设置为始终具有固定宽度,而不是可调整大小.我尝试过以下方法:

  • 出于某种原因,在窗格的子视图的Storyboard编辑器中无法使用自动布局约束.
  • 设置constrainMaxCoordinateconstrainMinCoordinate没有奏效.

有没有其他人最近上班?有很多关于这个主题的文章,但他们的工具集已有几年的历史了,他们的建议都没有对我有用.谢谢!

在此输入图像描述

macos nssplitview nssplitviewcontroller

4
推荐指数
1
解决办法
1828
查看次数

如何使用NSSplitViewController设置自定义NSSplitView?

我想使用自定义NSSplitView与我NSSplitViewController

文件说:

要提供自定义的拆分视图,请在继承的viewDidLoad()方法中调用super之前随时设置此属性。也就是说,在拆分视图控制器的isViewLoaded属性为true之前。

我的NSSplitViewController子类称为MainVC

我尝试-viewDidLoad在调用之前设置我的自定义拆分视图[super viewDidLoad]

- (void)viewDidLoad {
    self.splitView = [MySplitView new];
    [super viewDidLoad];
    // Rest of viewDidLoad...
}
Run Code Online (Sandbox Code Playgroud)

但这没用。我收到以下错误:

2017-09-02 10:35:43.527312-0700 Zee [6497:632581] ** *-[MainVC setSplitView:],/ BuildRoot / Library / Caches / com.apple.xbs / Sources / AppKit / AppKit-中的声明失败1561 / Controllers / NSSplitViewController.m:220

2017-09-02 10:35:43.527558-0700 Zee [6497:632581] MainVC:-splitView只能在加载视图之前分配

我也尝试覆盖loadView

- (void)loadView {
    self.splitView = [MySplitView new];
    [super loadView];
}
Run Code Online (Sandbox Code Playgroud)

但是我得到:

2017-09-02 10:39:39.377345-0700 …

macos cocoa appkit nssplitview nssplitviewcontroller

4
推荐指数
1
解决办法
643
查看次数

更新NSSplitViewController中的第二个视图控制器

我有NSSplitViewControllerfirst viewcontroller显示一个表,并second viewcontroller应基于表行的选择viewcontrollers清单显示视图-控制.

在此输入图像描述

我正在使用tableViewSelectionDidChange()获取所选行.

现在,我有一堆viewcontrollers的(故事板ID给出的行号),我应该添加和删除,以second viewcontrollerNSSplitViewController

我怎样才能做到这一点?

macos cocoa swift nssplitviewcontroller

2
推荐指数
1
解决办法
1271
查看次数