您需要設置文本字段作爲第一響應者通過使用-[NSWindow makeFirstResponder:]
。
由於這是一個NSWindow
方法,只有在向窗口添加相應的視圖後,即在將視圖添加爲窗口視圖層次結構內的子視圖之後,纔有意義。在本書的示例中,當您將視圖設置爲窗口內框的內容視圖時,會發生這種情況。例如:
- (void)displayViewController:(ManagingViewController *vc) {
// Try to end editing
NSWindow *w = [box window];
…
// Put the view in the box
NSView *v = [vc view];
[box setContentView:v];
// Set the first responder
if ([vc class] == [ViewController class]) {
[w makeFirstResponder:[(ViewController *)vc myTextField]];
}
}
這假定ViewController
暴露稱爲-myTextField
的吸氣劑的方法。
通過讓視圖控制器公開一個返回視圖控制器建議作爲第一響應者的對象的方法,可以使其更通用。喜歡的東西:
@interface ManagingViewController : NSViewController
…
- (NSResponder *)recommendedFirstResponder;
@end
@implementation ManagingViewController
…
- (NSResponder *)recommendedFirstResponder { return nil; }
@end
而且,在你的ManagingViewController
具體子類,具有-recommendedFirstResponder
回報的對象,應該是窗口的第一個響應者:
@implementation ViewController
…
- (NSResponder *)recommendedFirstResponder { return myTextField; }
@end
已經這樣做了,你可以改變你-displayViewController:
的東西如:
- (void)displayViewController:(ManagingViewController *vc) {
// Try to end editing
NSWindow *w = [box window];
…
// Put the view in the box
NSView *v = [vc view];
[box setContentView:v];
// Set the first responder
NSResponder *recommendedResponder = [vc recommendedFirstResponder];
if (recommendedResponder) [w makeFirstResponder:recommendedResponder];
}
您可以發佈您正在使用的代碼嗎? – Tim 2011-03-10 22:50:04
看看這本書的例子(29_ViewSwapping)。只添加'IBOutlet NSTextField *測試;'和'IBOutlet NSTextField * test2;'到DepartmentViewController.h和兩個NSTextFields到DepartmentView.nib – lueda 2011-03-11 10:22:22
像我說的...使用界面生成器。你可以輕鬆設置哪一個 – 2011-05-04 11:04:48