-[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
라는 getter 메소드를 노출 가정합니다.
보기 컨트롤러가 첫 번째 응답자로 권장하는 개체를 반환하는 메서드를보기 컨트롤러에 표시시켜 더 일반화 할 수 있습니다.
@interface ManagingViewController : NSViewController
…
- (NSResponder *)recommendedFirstResponder;
@end
@implementation ManagingViewController
…
- (NSResponder *)recommendedFirstResponder { return nil; }
@end
그리고 ManagingViewController
당신의 구상 서브 클래스는, -recommendedFirstResponder
반환 창의 첫 번째로 반응해야한다 물체가에 : 뭔가 같은
@implementation ViewController
…
- (NSResponder *)recommendedFirstResponder { return myTextField; }
@end
그 일을 갖는, 당신이 뭔가에
-displayViewController:
을 변경할 수 있습니다 like :
- (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
책의 예를보십시오 (29_ViewSwapping). Department Builder.nib – lueda
에 대한 두 개의 NSTextFields와 Interface Builder를 사용한 것만으로 DepartmentViewController.h에'IBOutlet NSTextField * test;'와'IBOutlet NSTextField * test2; 쉽게 설정할 수 있습니다 –