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

sam*_*sam 4 macos cocoa appkit nssplitview nssplitviewcontroller

我想使用自定义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 Zee [6575:639146] ** *-[__ NSArrayM objectAtIndex:]:索引0超出了空数组的范围

如果我在打电话后做了作业[super loadView],我会得到和我尝试时一样的错误-viewDidLoad

如何NSSplitViewNSSplitViewController子类中使用自定义?

Rya*_*ath 5

从技术上讲,此线程中可接受的答案是正确的,但是(可以理解)错过了一个错误,NSSplitViewController因为我没有在任何地方找到文档。我想这就是2017年可可的发展状态...

无论如何,这个问题是这样的:如果你和我一样,想用一NSSplitViewControllerNSSplitView开始只用一个视图,上面将无法正常工作,你会从OP获得索引错误的子类的方法。有一个私有方法(用于绘制分隔线),该方法NSSplitViewItem始终假设两个值都在其中,即使NSSplitView只使用一个也可以。

我最终要做的是将NSSplitViewController和都子类化NSSplitView,并检查是否创建了仅具有一个视图的视图,并交换了一个空白NSViewController实例,该实例将在加载阶段确定下来后被删除。我还发现splitViewController.splitViewItems = ...直接设置不能很好地工作,因此您应该打电话addSplitViewItem:进行操作-大概是幕后有些东西,否则您会错过这些东西。

令人讨厌的是,该类没有文档记录,即使它在整体上非常有用。如果您是一个任性的旅行者,并且发现了这一点,希望对您有所帮助。