2010-12-13 51 views
4

當用戶完成編輯時,我想讓我的文本字段退出第一響應者,就像他們按回車鍵時一樣。委託方法正在調用,但我現在沒有工作,這樣做的正確方法是什麼?NSTextField辭職第一響應者

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor 
{ 
    [fieldEditor resignFirstResponder]; 
    return YES; 
} 

回答

17

從上-resignFirstResponder方法文檔:

使用NSWindow makeFirstResponder: 方法,而不是此方法,使一個 o對第一響應者進行響應。從不 直接調用此方法。

此代碼應該這樣做:

[myWindow makeFirstResponder:nil]; 
+0

它導致崩潰,但我認爲這是另一個問題,當我修復它時,我認爲您的解決方案將工作。謝謝。 – avizzini 2010-12-13 17:59:23

+0

這個問題絕對是其他地方。這是導致* nothing *成爲窗口的第一響應者的正確方法。 – 2010-12-13 19:17:26

+0

當我調用它時,它會導致窗口詢問控件控件的無限循環:textShouldEndEditing:,它調用makeFirstResponder:ad infinitum。 – SG1 2013-03-12 16:30:46

-4

我在iPhone編程方面的專家,但還需要實現的方法是「textFieldShouldReturn」實現這樣的:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
}

+1

也許我應該更清楚一點,它不適用於iPhone應用程序。您展示的方法是針對Cocoa Touch的UITextField委託。 – avizzini 2010-12-13 16:48:45

+0

這不是在osx sdk每個類開始於UI屬於iOS而不是OSX – damithH 2014-01-31 05:22:51

0

我相信你正在尋找的NSControl委託方法:

- (void)controlTextDidEndEditing:(NSNotification *)notif 

NSTextField委託(IB中輕鬆設置)實現此方法。

那麼你的要求更改響應,如

[self.window selectNextKeyView:self] 

應該工作。

5
- (void)controlTextDidEndEditing:(NSNotification *)obj { 

    [self.window makeFirstResponder:view]; 
} 

其中「view」是NSTextView控件的父級NSView。

+0

這是正確的。它適用於牀單 – 2016-06-09 10:30:47

相關問題