2010-09-28 43 views
0

我想提出一些綁定是切換項冠軍,在基於文本字段的單一數值彈出菜單的標題。讓我來解釋:如何使用單一NSValueTransformer子類來切換多個菜單項

這是我的UI:

a text field and a pop up menu

the pop up menu

我希望我的菜單項,自動調整到單數還是複數基於文本字段中的數字。例如,當我在框中輸入「1」時,我希望菜單項被標記爲「分鐘」,「小時」和「日」。當我輸入「4」時,我希望菜單項被標記爲「分鐘」,「小時」和「天」。

我所做的最新內容:

  1. 我綁定的三個菜單項的標籤爲文本字段的值相同的密鑰路徑。
  2. 我創建了一個NSValueTransformer子類來解釋文本字段中的值,並返回單數或複數用作項目名稱。
  3. 我應用這個值轉換三個綁定。

問題:

我的價值變壓器可以返回單數或複數,但不能設置基於它的應用菜單項相應的字符串。

它看起來對我像一個值轉換器是通用的,不能針對不同的目的地返回不同的值。這意味着要讓三個標題自動更改,我需要有三個不同的值轉換器,它們爲每個菜單項返回相應的字符串。這看起來並不理想。

理想情況下,當文本字段的值大於1時,我可以將值存儲在目標菜單項中的字符串(假設在項目的標籤屬性中)與值「s」結合起來,或者類似的東西這將使我能夠爲所有菜單項使用單個值轉換器。

有什麼我錯過了嗎?什麼是理想的解決方案?

回答

1

好吧,這可能不是一個理想的解決方案,但有些事你可以考慮:如果你從你的代碼中設置的值轉換器(而不是IB),那麼你可以用相同的類3個不同的變壓器。你可以給你的價值變壓器伊娃NSString *unit(並添加類似[[MyValueTransformer alloc] initWithUnit:])讓每個返回自己的字符串,但你還是得寫值轉換的代碼只有一次。 (另外,如果你打算考慮讓你的應用程序本地化,只需附加一個「s」來創建複數就行不通了。你當然可以爲NSString *singularNSString *plural添加ivars來做到這一點)


編輯:等等,我只是意識到你可以註冊價值變壓器!如果您註冊爲MyValueTransformerHoursMyValueTransformerMinutes(通過手動將alloc ating和init ializing在您的代碼中),您可以從Interface Builder中使用它們。另見https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ValueTransformers/Concepts/Registration.html#//apple_ref/doc/uid/20002166-BAJEAIEE

+0

太棒了!你的編輯正是我需要的。這不是一個無代碼的解決方案,但它非常接近。謝謝! – Form 2010-09-28 15:52:58