2009-05-04 100 views
12

我有一個NSTableView,我希望允許用戶拖放視頻文件。當他們放棄文件時,它將作爲表格視圖中的一行添加。將文件拖放到NSTableView上?

我該怎麼做呢?目前的tableview的由陣列控制器(從一個NSMutableArray的獲取其數據)

我發現this文檔獲取其數據,但似乎無法使它工作..

我..

  • 提出了「TableCon」類(我改變從NSTableView的,不是NSObject的繼承)
  • 改變了NSTableView的類TableCon
  • 的NSTableView的的委託出口設置爲該類
  • 在TableCon的init
  • 實施- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;(再次TableCon)

..但是,什麼叫registerForDraggedTypes,它就像我從來沒有改變任何東西(沒有錯誤),我究竟做錯了什麼?

編輯:我已經試過落實波阿斯Stuller的建議,同時也找到了解決的this描述(first reply包括解決第一篇文章)。所以我現在做的是..

  • 子類NSArrayController的,哪些資訊內容表視圖(TableListCon)
  • 添加tableView出口TableListCon(並指出其在NSTableView的)
  • 實施validateDrop,writeRowsWithIndexes ,並接受TableListContent中的Drop
  • 在tableView插座上調用registerForDraggedTypes。

同樣,沒有錯誤/警告,但只有awakeFromNib方法好像是叫(其他方法都不是所謂的)

+2

這些是數據源方法。您需要將表視圖的dataSource出口掛接到實現這些方法的類,以便調用它們。 – 2009-05-05 01:39:31

+1

Ohhhhh,這就是我做錯了!通過「數據源」我假設它意味着陣列控制器!現在所有的工作都很完美,您能否將這些信息添加到您的答案中,以便我可以接受它?謝謝波阿斯! – dbr 2009-05-05 02:00:32

回答

21

NSTableView的來自通用視圖處理拖放和拖放不同,這是整體一件好事。這意味着您不必手動處理表格所需的複雜突出顯示,單元格跟蹤和插入行爲。

需要什麼的描述可以找到here。基本上,您仍然調用-registerDraggedTypes :(通常在您的-awakeFromNib方法中),而不是實現NSDraggingDestination方法,而是實現與拖放相關的各種數據源方法,可以在here找到。你不應該需要繼承NSTableView來實現這種拖放方式。

注意這些是數據源方法。您需要將表視圖的dataSource出口掛接到實現這些方法的類,以便調用它們。

1

除了Boaz所說的之外,聽起來您正在創建一個NSTableView子類,然後將該子類的一個實例作爲NSTableView的委託。如果您要繼承子類,則應該使用該子類來代替NSTableView,而不是除此之外。此外,將視圖視爲另一個對象的代表幾乎總是違反關注點。