我想在窗口中找到第一个响应者视图。为此,我想实现这样的类别:
@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];
}
答案 0 :(得分:32)
-[NSWindow firstResponder]
有什么问题,它会直接返回第一个响应者?
答案 1 :(得分:2)
如果您只想要第一个响应者,请使用firstResponder
的{{1}}方法。
如果您想要针对特定操作的第一响应者(例如NSWindow
)
targetForAction:
方法