的子类我有一个TextViewController
这是NSViewController
一个子类,其控制包含NSTextView
管理FirstResponder在NSViewController
附上的TextViewController
实例以现有的视图用下面的代码
TextViewController *textViewer;
视图
...
[[self view] addSubview:[textViewer view]]; // embed new TextView in our host view
[[textViewer view] setFrame:[[self view] bounds]]; // resize the controller's view to the host size
textViewer.delegate = self;
[split.window makeFirstResponder:textViewer];
这工作得很好,和TextViewController
捕获keyDown
事件以执行各种操作。
我想让用户选择NSTextView
中的文字复制到剪贴板。 不幸的是,点击NSTextView
使得这个FirstResponder
并且停止TextViewController
响应按键。
我可以强制FirstResponder返回到我的TextViewController,但这看起来像一个kludge。
- (void)textViewDidChangeSelection:(NSNotification *)aNotification {
[self.view.window makeFirstResponder:self];
}
我知道我可以继承NSTextView
套住keydown事件,但是这似乎并没有要好得多。
我确定必须有一个更优雅的方式来做到这一点。
我加NSTextView的子类,只是传递该keydown控制器
@protocol MyTextViewDelegate
- (BOOL)keyPressedInTextView:(NSEvent *)theEvent;
@end
@interface MyTextView : NSTextView
@property (assign) IBOutlet NSObject <MyTextViewDelegate> *delegate;
@end
...
@implementation MyTextView
@synthesize delegate;
- (void)keyDown:(NSEvent *)theEvent {
if([self.delegate respondsToSelector:@selector(keyPressedInTextView:)]) {
if([self.delegate keyPressedInTextView:theEvent])
return;
}
[super keyDown:theEvent];
}
@end
'[TextViewController keyDown]'执行什么操作? – trojanfoe 2012-07-05 13:41:00