我想在窗口中找到第一响应者视图。为此,我想实现这样的类别:
@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 在 Cocoa 中工作?
更多信息:稍后我想在我的窗口控制器中以某种方式使用上述方法,例如:
NSArray *copiedObjects;
if ([[self window]contentView] == MyTableView) {
copiedObjects = [tableController selectedObjects];
}
if ([[self window]contentView] == MyOutlineView) {
copiedObjects = [treeController selectedFolders];
}