【问题标题】:Adding label elements to NSOutlineView将标签元素添加到 NSOutlineView
【发布时间】:2013-05-03 13:09:07
【问题描述】:

我将NSOutlineView 设置为与datasource 一起使用。显示我的数据没有问题,除了一个小细节:标签分支。

我需要在我的树中显示分支,这些分支只是作为对子元素进行分组的一种方式。比如说,我有一个 "Parent" 元素。在 "Parent" 下,我将有一个名为 "Children" 的可扩展元素,当它展开时,所有子项都会显示。但是元素 “Children” 不是业务逻辑的一部分。

我知道NSOutlineView 不会保留它显示的数据,因此我在.m 文件的头部创建了一个带有"Children" 字符串的常量。问题是,如果我的结构包含很多父母,那么树的行为就会变得不稳定,因为每次我展开 “Children” 时,我都会有效地展开所有 “Children” 在树上。

那么,我怎样才能将一个元素添加到树中,只是为了标记目的,虽然它看起来一样,但不一样?

【问题讨论】:

    标签: objective-c macos cocoa nsstring nsoutlineview


    【解决方案1】:

    我建议您在数据源内部创建一个模型,该模型与您希望在大纲中显示的内容的结构非常匹配。这具有易于理解和通常在委托调用方面高效的双重优势。

    例如,您的真实模型可能是书籍列表,但出于显示目的,您希望将它们按标题的第一个字母(A、B、C...)分组。在数据源委托中,您可以使用此结构 @{@"firstLetter":@"A", @"books":bookArray}. 创建一个字典数组。然后在委托方法中使用这个新数组作为模型。

    当然,您需要管理这个内部模型,但这通常很简单。

    【讨论】:

    • 我的确切问题是我在控制器的多个位置显示相同的字符串。我试过复制它,但它总是以相同的地址结束,我相信这就是导致错误的原因。
    • 如果您在多个地方使用完全相同的对象,您在重新加载时也会遇到折叠状态的问题。您应该改用副本或不同的包装对象。
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2017-05-04
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多