【问题标题】:NSTableView problems - displaying custom TableView from with a SplitView panelNSTableView 问题 - 使用 SplitView 面板显示自定义 TableView
【发布时间】:2014-11-12 17:12:09
【问题描述】:

我正在为 OSX 开发我的第一个应用程序。很抱歉问了愚蠢的问题。我花了几个小时试图自己解决这个问题,但到目前为止没有运气。

我想制作一个类似 iTunes 的界面。我使用了 NSSplitView,将 NSView 用于导航,将 NSTableView 放在上面。 [我知道 NSSplitView 有更好的替代品,但我的目标是既要开发应用程序,还要在此过程中学习 Cocoa/OSX。] 在指定用于导航的 NSView 面板上,我试图放置 NSTableView。但是,我的表格没有显示。因此我有疑问...

我了解要填充单元格,控制器必须实现 NSTableViewDataSource。我试过了,但到目前为止还没有成功——以至于我看不到桌子。请指教:

  1. 我可以有一个工作的 NSTableView 派生的自定义类也实现 NSTableViewDataSource 吗?如果这不起作用,请告知原因或指出我的解释。
  2. 我认为所有元素都可以通过编程方式操作是否正确,因为我在标头中使用 IBOutlet 来指向正确的对象,但对 InterfaceBuilder 不做任何事情 - 一切都在我的 Objective-C 代码中进行控制?我必须使用 IB 吗?

谢谢。

【问题讨论】:

    标签: objective-c macos cocoa nstableview nsview


    【解决方案1】:
    1. 是的,这可行,但这是一种不寻常的方法。通常,tableview 委托/数据源是包含 tableview 的东西。如果您需要一些默认情况下未提供的附加功能(对我来说这是自定义输入行为),您通常只会继承 NSTableView
    2. 是的,您可以通过编程方式完成所有操作,但是您会发现使用 IB 更容易。 IB 加载的视图是使用 nib 文件中包含的信息以编程方式创建的。您很快就会发现它冗长乏味。

    WRT 解决您没有看到表格的问题,您需要在几个关键的委托/数据源方法上添加日志记录/断点,以确保它们被调用(从它们的爸爸开始numberOfRowsInTableView:)。如果不是,那么您没有在 tableview 中正确设置委托/数据源。

    【讨论】:

    • 谢谢。我确实喜欢你的建议 - 子类化 NSTableView 并让派生类实现 DataSource 方法。就 IB 更容易使用而言,我相信您总体上是对的。就我而言,我只是不明白为什么需要它。我可以根据需要简单地显示它们[详细部分],而不是隐藏和显示/添加视图。也许,我错过了重点。不过还是谢谢你的建议。你知道什么会导致我的 NSTableView 子类不显示吗?如果我发布代码会有帮助吗?那里没有太多东西——只有控制外观的东西。
    • @MosheShmukler 是的,更多细节总是有帮助的(在一定程度上)。
    • 谢谢。非常感谢您的帮助。我有一个面板 - NSView。它显示得很好。标题:
    • Stackoverflow 只允许在 90 分钟内发布一次。我将在超时到期后立即发布。非常感谢您的帮助。
    • 我在stackoverflow.com/questions/25913379/… 上发布了代码,在stackoverflow.com/questions/25969981/… 上发布了更多详细信息,现在已经卡在这个问题上几天了。
    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多