2017-09-25 30 views
0

我在維護NSTableView上的選擇時遇到問題。我正在使用xCode 8.3.3與Swift 3.1併爲macOS構建。如何使用「將內容作爲複合值處理」來維護TableView選擇

基於單元格的tableView是在IB中創建的,並且在表格的第一列中有一個NSButtonCell(複選框)。此列綁定到ModifiersController.arrangedObjects.enabled。該複選框的功能與預期相同,意味着它可以正確檢查和取消選中。

問題是,當我通過單擊它來更改複選框的狀態時,所選行變爲未選中狀態,並且第一行變爲被選中狀態。無論在更改複選框時選擇哪一行,它始終是選中的第一行。

我希望發生的是檢查/取消選中該框不應該影響選定的行(突出顯示)。

enter image description here

的ArrayController被命名爲 'ModifiersController',其Content Array勢必名爲MinimizeModifiers一個User Defaults Controller關鍵。 MinimizeModifiers是一個值爲Value Transformer的字典。由於這一點,我已啓用對複選框手柄內容作爲複合值

arraycontroller_bindings

把手內容作爲複合值關閉(禁止),在表中選擇被適當地維持,但底層代碼(綁定到UserDefaults)不起作用。

把手含量複合值,UI元素值正確綁定到UserDefaults,然而,這是什麼似乎導致表失去當前選擇

所以,問題是: 如何保持表格行選擇處理內容作爲複合值已啓用?

補遺

的的tableView勢必selectionIndexes和陣列控制器被設置爲preserve selection(I也曾嘗試用preserve selection斷,並用「避免空選擇」無論在關閉 - 沒有成功)。

selectionIndexes_bind

arraycontroller_preserve

而且迷你電影顯示問題(如果允許的話)的鏈接... https://www.rgbworld.com/images/stackoverflow/selection.m4v

Addendum2

我已經更新了代碼的Xcode 9和Swift 4,問題依然存在。我相信這個問題可能與我使用KVO和/或使用支持變量用於我的@objc dynamic var s

我創建了一個github存儲庫,以防有人可以幫忙。我將爲幫助我解決此問題的開發者添加一筆賞金。

Githib回購

https://github.com/rgbworld/CompoundTransformer https://github.com/rgbworld/CompoundTransformer

+0

你的表視圖,以陣列控制器的結合「選材指標」? 'Preserve Selection'是否打開? – Willeke

+0

@Willeke感謝您的回覆。是和是。我已更新問題以顯示設置。 – rgbworld

+0

我無法重現此問題,但點擊複選框不會觸發保存數據。奇怪的是,當我試圖找出表視圖如何處理選擇,我最終在這個問題相同的方法[如何使NSArrayController保留自定義對象的選擇工作?](https:// stackoverflow。 COM /問題/ 46233759 /如何對化妝NSArrayController的-preservesselection工作換定製對象)。 – Willeke

回答