2009-08-10 20 views
5

我想創建一個Cocoa應用程序,其中包含與Things.app(see the screencast)的ToDo列表非常相似的條目列表。現在的問題是我是否應該使用如何在Cocoa中實現自定義列表?

  1. 一個TableView中,
  2. 一個的CollectionView或
  3. 網頁視圖。

我認爲它可以適用於所有這些,但哪一個最適合以下要求?

  • 有條目列表 - > 1列&許多行
  • 重新排序與拖&下降
  • 選擇單個條目如刪除
  • 行動&使用鑰匙打開了一個條目:該行應展開顯示更多輸入字段
  • 定製外觀:圓角,陰影,背景漸變

到目前爲止,我的研究表明,TableView具有大部分功能,但在外觀上很難自定義,CollectionView沒有拖動(right?),但易於設計,並且WebView需要付出很多努力以不傷害用戶體驗,我不能將我的模型直接綁定到輸入字段。

我缺少什麼優點和缺點,以及您會推薦使用什麼?

回答

4

WebView沒有意義。如果您使用WebView,那麼您也可以創建一個Web應用程序。一個NSCollectionView更適用於像網格一樣的數據,比如每小時的電視列表。

在這種情況下,NSTableView是唯一有意義的。我用NSTableView實現了所有5個重點,沒有問題。您需要擴展NSTableView併爲自定義外觀進行一些自定義繪圖。這是最難的部分。

2
  • 開闢一個條目:該行應擴大,顯示多個輸入字段

你需要一個outline view。表格視圖用於平面列表。

請注意,NSOutlineView是NSTableView的子類,所以所有的表視圖功能也可以在大綱視圖上工作。

+0

嗯,不在NSOutlineView中擴展行只是顯示更多的「亞行」?我寧願要改變行高並將更多東西放入其中。這有意義嗎? – Christian 2009-08-11 10:11:49

+0

是的。您可能實際上使用了一個表視圖,並實現了他們在Tiger中添加的對tableView:heightForRow:委託方法的支持:http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/ Reference.html#// apple_ref/occ/instm/NSObject/tableView:heightOfRow: – 2009-08-11 13:10:06

+1

您還需要一個自定義單元格,您可以在不同的展開狀態之間切換。 – 2009-08-11 13:10:51

2

有人已經這樣做過。一個我已經成功使用的是Matteo Bertozzi,在這裏可以得到:http://th30z.netsons.org/2009/03/cocoa-sidebar-with-badges-take-2/它可能需要的按摩,以使其正常工作(特別是如果您需要複雜的拖放行爲),但對於基本功能,比如獲得列表中的章節標題和項目,它工作得很好。

編輯:這有come up before,是在cocoa-dev郵件列表上的一個常見問題。 Here are some other options

+0

這些都是很好的資源,但我不認爲側欄是我們在這裏討論的內容。這是事物的「主要內容視圖」部分,其中實際的待辦事項存在。 – jbrennan 2009-08-10 15:05:43

+0

@jbrennantouché。我開始觀看相關的屏幕錄像,看到側邊欄,並假設他正在想要的。你可以在技術上實現它,以及他在問題中提出的任何選項。我想我應該在回答之前完整地閱讀這個問題,呃? :) – 2009-08-10 15:14:10

0

我在接近我的應用程序中的相同問題(有一個類似於東西待辦事項列表的大列表),我認爲表格視圖在這裏會有很多意義。

訣竅是讓你的單元格(「行」)在雙擊時展開。這是迄今爲止我所取得的所有進展。

+0

你是如何得到擴展雙擊工作? – Christian 2009-08-11 13:10:14

+0

可悲的是我還沒有完全得到那個工作!所以我可能是錯的......目前,我對Cocoa-touch的經驗比Cocoa多得多。 – jbrennan 2009-08-11 13:27:22

1

剛剛看了一下Things.app本身,使用「任何地方的F腳本」。

他們使用了一個名爲「DetailTableView」的NSTableView的子類,它呈現濃縮待辦事項。使用名爲「ToDoCell」的自定義單元來實現摺疊的待辦事項項目,但編輯時展開的外觀很有趣。在這種情況下,他們有一個名爲「ToDoEditView」的自定義視圖,在需要時將其作爲DetailTableView的子視圖插入。我懷疑這個編輯視圖會暫時作爲子視圖添加到正確的位置,並且當它存在時,tableview的相應行會暫時調整大小。

所有漂亮的投機..我很想知道這是如何完成的細節。這是一個很棒的用戶界面。

+0

好偵探工作。我忘記了F-Script。還有很好的選擇是類轉儲。爲什麼不檢查應用程序包的Res​​ources文件夾,查看它的筆尖。這些都是過去幫助過我的東西。 – jbrennan 2009-08-11 19:22:47

+0

是的..值得做的事情上面的所有東西..爲靈感,因爲它是一個很好的設計的應用程序。另外..我認爲,「開放一條龍」的要求最好使用東西使用的「插入視圖」方法來實現,因爲如果你能夠使它工作,這會給你很大的靈活性。顯然,這個技巧(正如jbrennan指出的那樣)正在擴大這一行,爲細節視圖騰出空間。實際上我沒有任何經驗可以嘗試。 – 2009-08-11 21:09:10

相關問題