问题描述
我希望在窗口中找到First Responder视图。为此,我想实现如下类别:
@implementation NSView (ViewExtensions)
- (NSView *)findFirstResponder
{
if ([self isFirstResponder]) {
return self;
}
for (NSView *subView in [self subviews]) {
NSView *firstResponder = [subView findFirstResponder];
if (firstResponder != nil) {
return firstResponder;
}
}
return nil;
}
@end
以上代码基于SO:Get the current first responder without using a private API上的此问题/答案。
问题可能在于NSResponder没有像UIResponder那样的isFirstResponder方法。NSResponder的等价物是什么?
如果按照上面的方法实现,我当然会收到调试消息:"‘NSView’可能不会响应‘isFirstResponder’"。
如何使findFirstResponder在可可中工作?
更多信息:稍后我想在我的窗口控制器中使用上述方法,如下所示:
NSArray *copiedObjects;
if ([[self window]contentView] == MyTableView) {
copiedObjects = [tableController selectedObjects];
}
if ([[self window]contentView] == MyOutlineView) {
copiedObjects = [treeController selectedFolders];
}
推荐答案
直接返回第一个响应者的-[NSWindow firstResponder]
有什么问题?