0

在覈心數據實體,我有一個「長度」屬性。我保存的長度以釐米爲單位。如何將NSPopUpButton與測量單位選擇連接到NSTextField的顯示方式?

我想給用戶查看和編輯釐米或英寸長度的可能性。所以,我把一個的NSTextField旁邊的一個NSPopUpButton cm和英寸作爲選擇

根據NSPopUpButton選擇格式化NSTextField的最佳方式是什麼?如果合理的這個問題,我想盡可能使用綁定。

我看到有

  • NSNumberFormatters和
  • NSValueTransformers

我也可以編寫自定義代碼來轉換單位?

什麼是解決這一問題的最優雅的方式?

回答

1

如果你堅持下去的釐米/在用戶爲每個實體的選擇與實體的屬性的選擇,你可以用值綁定,並與逆轉變的自定義值轉換器的文本框,一釐米做/在彈出窗口中的選擇綁定上,以及實體上的keyPathsForValuesAffectingLength類方法。

如果屬性displaysInInches--或其他任何您稱之爲的鍵被註冊爲影響長度值的keyPath,則在彈出窗口切換時將自動調用自定義值轉換器,並更新文本字段。

如果cm/in選項來自用戶默認值(如果更改不是每個實例),則可以將彈出窗口綁定到用戶默認值,並讓自定義值轉換器考慮默認值,但更改該彈出窗口將不會不要刷新文本框。所以我認爲你需要一個IBAction來觸及實例的長度。

您可以在其上添加數字格式化程序 - 特別是如果您的值轉換器轉換爲NSNumber而不是NSString--但主要用於本地化和有效數字的數目,而不是cm /數學。

+0

謝謝。我會試驗你的想法。沒有默認值,我不想存儲每個實體的選擇。在我的用例中,用戶可能希望根據現實世界中的數據呈現給他/她的方式,一次查看/輸入長度爲英寸,一次爲釐米。 – MartinW

+0

如果彈出狀態是僅供查看,則值轉換也必須僅爲查看。因此,也許這會啓動你一個自定義的'NSFormatter',但我聽說過很少有這樣的事情。我的「答案」更多的是一個長期的評論,所以請回答自己,如果這樣做的話! – stevesliva

+0

我做了一個自定義的'CmToInchValueTransformer',並已經成功地測試了它,當我把它分配給'NSTextField'耐用。現在缺少的是我可以連接它的方式,以便在'NSPopUpButton'中選擇_inch_時使用它,並且在選擇_cm_時不會使用它。 – MartinW

相關問題