2014-03-27 33 views
0

我正在研究一個需要特殊文本字段來編輯字節值的項目。我目前的解決方案是專門只讀文本框和「...」按鈕,打開酥料餅如下圖所示的圖像:如何處理NSTextField子類的第一響應者狀態?

The current solution, popover

現在我儘量讓我的解決方案更加人性化。我的目標是:

  • 如果文本字段獲得第一個響應者狀態,彈出窗口會自動打開。
  • 選擇完整文本。
  • 如果用戶使用標籤離開文本字段或選擇彈出框外的任何字段,彈出窗口應自動關閉。
  • 如果用戶鍵入任何有效的編號和尾碼字節值被更新(例如「10 GB」)

目前我正在一點點無知。我的問題是這些:

  • 當文本字段得到第一響應者時,子類中檢測的最佳位置在哪裏?
  • 如何檢測領域辭職是第一響應者?
  • 還有其他更簡單的解決方案嗎?
+0

更好的設計可能是一個NSValueTransformer是採用NSByteCountFormatter和其他一些神奇的按摩VA略。 –

+0

@GerdK我已經使用NSByteCountFormatter將字節值轉換爲文本。但是,這隻能從字節值到文本,但不能返回。彈出窗口還提供了一個對數滑塊,可以簡化高數值的輸入。 – Flovdis

+0

這就是爲什麼我建議使用NSValueTransformer。它可以將輸入如10k轉換爲10,000等,在它的-reverseTransformedValue:方法中。然後在-transformedValue:方法中使用您的NSByteCountFormatter。這避免了連接到它的彈出窗口和凌亂的邏輯。 –

回答

1

我可以用- (BOOL)becomeFirstResponder爲機以顯示酥料餅和觀察第一響應者自動隱藏酥料餅實現的一切:

- (void)viewDidMoveToWindow 
{ 
    [super viewDidMoveToWindow]; 
    [self.window addObserver:self forKeyPath:NSStringFromSelector(@selector(firstResponder)) options:0 context:NULL]; 
} 

作爲一個起點,我出版了類工作項目在GitHub(MIT許可證):

Project on GitHub

+0

我投了你的答案,但...「NSStringFromSelector(@selector(firstResponder))」是非常迂迴的說法@「firstResponder」。 – George

+1

@George這是真的,但是如果你在'@「firstResponder」中輸入錯誤,你將不會注意到,但是如果你在NSStringFromSelector(@selector(firstResponder))中輸入錯誤,你將會收到一個編譯錯誤。 – Flovdis

+0

夠公平的。早期的反饋總是更好。 – George

相關問題