2012-04-19 17 views
0

我正在製作一個有四個NSTextField框的小程序。每個盒子通過一個公式與其他盒子相關。基本上,我現在正在工作,在你點擊開箱後,它會計算出其他的盒子(你可以在任何盒子裏輸入數字)。需要計算Objective-C中每次按鍵後的字段(四個NSTextField)

我想要的是在每次按鍵後,我想調用方框的動作來計算其他方框。所以,結果應該立即發生,不僅在點擊盒子或擊打標籤後,等等。

我還在學習ObjC,所以,雖然我試圖檢查文檔,但他們沒有似乎直接適用於我的問題。

我已經定義了以下措施:

- (IBAction)boxX1:(id)sender; 
- (IBAction)boxY1:(id)sender; 
- (IBAction)boxX2:(id)sender; 
- (IBAction)boxY2:(id)sender; 

對於每一個,有一些代碼,調用正確的方式計算功能...

因此,基本的問題是..我如何看keyDown:events,特別是,知道boxX1與boxY2發生了keyDown事件,並且能夠獲取這些框的內容(在keyDown事件之後)並執行我的計算?

例如,下面是boxX2代碼:

- (IBAction)boxY2:(id)sender { 
    self.boxX2.stringValue = [ARCBrain calculateRatio:self.boxX1.stringValue times:self.boxY2.stringValue dividedBy:self.boxY1.stringValue]; 
} 

我只需要能夠每按一次鍵來調用它..似乎很容易,不是嗎?

感謝

+0

你將不得不繼承實際的按鍵事件,而你不想要那些事情,因爲你必須自己將它們解釋爲文本。您需要創建一個文本字段委託並監視文本更改通知。見:http://stackoverflow.com/questions/6164471/listen-to-a-value-change-of-my-text-field – 2012-04-19 17:32:01

+0

對不起,我還在學習ObjC,所以,發現很難掌握如何實現這個..我已經添加了更多我以上使用的代碼。也許這會更有意義?我試圖實現controlTextDidChange:但方法永遠不會被調用它似乎.. – DrDavid 2012-04-19 17:53:59

+0

你必須確保實現'controlTextDidChange:'的對象實際上被設置爲各種文本字段的代表。在Interface Builder中(字段有一個「委託」出口)或'awakeFromNib:':'[boxX2 setDelegate:self];' – 2012-04-19 18:42:52

回答

2

這裏是我落得這樣做:

我加了這一點:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:nil]; 

到-applicationDidFinishLaunching :方法,然後,添加:

-(void) textDidChange:(NSNotification *)obj { 
    if ([obj object] == self.boxX1) { 
     //do stuff 
    } else ... { 
    // Do other stuff 
    } 
    ... 
} 

到課堂..工作就像一個魅力!

-1

檢查,如果你可以使用這個方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 
+0

這是一個UITextFieldDelegate方法。 – Nilesh 2012-04-19 19:32:22

+2

我沒有-1你的答案@Nilesh,但我認爲有人這樣做是因爲DrDavid正在討論'NSTextField'(對於MacOS)和** NOT **'UITextField'。有一個區別。 – 2012-04-19 20:20:58