2012-01-29 93 views
1

我仍然有很多可以使用可可来学习,所以我可能错过了一些明显的东西。我有一个自定义视图,我想在一个nssplitview中显示,替换当前的子视图。将NSSplitview的子视图替换为自定义视图

我有一个MessageView.xib文件和一个MessageView .h/.m,其子类NSView。我通过Xcode 4内置的gui构建器为我的主窗口(包含nssplitview的窗口)创建了一个自定义视图实例。我在我的窗口控制器中为这个MessageView实例创建了一个插座。

在我的控制器的窗口时,我想换出子视图的SPLITVIEW运行这个

[splitView replaceSubview:[[splitView subviews] objectAtIndex:1] with:viewMessage]; 

viewMessage是出口到消息查看。

运行此代码时,该子视图的显示将变为空白。我不确定我的自定义视图是否有问题,或者有一些尺寸问题。有什么我需要做的,以适应视图到分割屏幕视图或我的自定义视图只是不正确显示?我很难找到关于用Xcode 4创建自定义子视图的教程,所以我不确定是否有什么可能是错误的。自定义视图中只有一个标签和一个文本框。

+0

你有没有想过这个想法? – livingtech 2012-05-22 18:55:51

+1

看起来像这样可以修复它:http://stackoverflow.com/q/1419038/18961 – livingtech 2012-05-22 18:57:20

回答

3

通常,您不应该用自己的NSSplitView的子视图替换。相反,您将自己的自定义视图添加为分隔线两侧默认子视图的子视图。你可以用代码addSubview:来做到这一点,但在Xcode中使用Interface Builder可能更容易。将一个“自定义视图”到SPLITVIEW,然后在身份检查,在自定义类,类更改为您自定义的NSView子类的名称:

enter image description here

我想(把我的头顶部,未经测试),如果您确实需要用您自己的类替换默认的NSSplitView子视图,则可以使用此方法在Interface Builder中执行此操作,但选择默认子视图本身并在检查器中更改其类。这不适用于所有AppKit类,但它可能适用于NSSplitView。

+0

这并没有真正回答这里的问题。您建议如何使用子类,但问题是如何在运行时替换或替换现有的视图。我也有同样的需要。 (就像下面的Wakjob一样。)当我得到这个工作时,我可能会再次发布。 – livingtech 2012-05-22 18:55:12

+1

这不是(仍然不清楚)为什么OP想要在运行时用自己的视图替换分割视图的默认子视图,而不是将其自己的视图添加为子视图,这是标准方法。我并不认为没有理由这样做,但是当一个自我描述的初学者询问建议时,我倾向于引导他们走向标准方法,除非有明确的理由去做更复杂的事情。与链接的问题不同,他没有清楚地表明他在运行时在多个视图之间切换。 – 2012-05-22 19:59:51