2011-03-26 43 views
9

我正在嘗試使用NSArrayController和可可綁定來創建分段的NSTableView。我正在尋找類似的方法,例如在iOS中使用NSFetchedResultsController,您可以在其中設置節的關鍵路徑。我想與NSArrayController做類似的事情。使用NSArrayController的分段NSTableView

我舉個例子: 我有不同的任務。每個任務都有三個不同的優先級中的一個,低,中或高。這些任務還有標題,描述,日期等屬性。我想按優先級對這些任務進行分段或分組(這裏的部分關鍵路徑是優先級)。

你可以用綁定和NSArrayController來解決這個問題嗎?我需要多個NSArrayController還是隻有一個?

+0

試試https://developer.apple.com/library/mac/samplecode/TableViewPlayground/Introduction/Intro.html – johndpope 2015-09-14 04:18:58

回答

7

儘管NSTableView可以渲染組行,但不幸的是它依賴於委託或數據源來平滑層次結構。它不理解備選數據源語義,如UITableView的,NSArrayController也不具有NSFetchedResultsController的部分方法的等價物。

一種選擇是NSOutlineView這是專爲顯示任意深層次的數據,但它可能是一個簡單的兩層結構產生比必要更多的工作。 (您可以在大綱視圖綁定到NSTreeController但樹控制器不良記錄,並啓動,它的設計拙劣。)

所以,這裏是我的建議:

  • 寫您自己的控制器類,它實現NSTableViewDelegateNSTableViewDataSource
  • 使用一個按優先級排序的單個數組控制器,並編寫自己的代碼來抵消行索引以適應節標題。
  • tableView:isGroupRow:返回YES的章節標題。
  • 不要使用這個綁定。

您還可以從第三方尋找可重複使用,具有綁定功能的控制器。

+0

可以將NSTableCell字段的綁定與自制節標題結合使用!你應該實現'NSTableViewDelegate'方法'tableview:isGroupRow:'和'tableView:rowViewForRow:'。你可以省略'tableview:viewForTableColumn:row'的實現,它可以通過綁定完成。 – 2017-02-01 10:39:39

0

你必須有恰好擁有你想要的NSTableView的內容的自定義類實例手工填寫NSArrayController的包括組行。控制器必須按照正確的順序填寫。所以它應該從一個組頭對象開始,然後是一些數據對象,一個新的頭對象,等等。自定義類應包含以下屬性:

  1. 組標題的字符串值。當該行不是組頭時爲零。
  2. 布爾值isGroupHeader。需要一個簡單的tableView:isGroupRow:實施。
  3. 您的常規數據的NSManagedObject值。當行是組標題時爲零。

有了這個,您可以使用所有工具來實現所有NSTableView代表以獲得正確分組的表格視圖。

相關問題