繁体   English   中英

如何从 Cocoa 中的窗口控制器获取当前的第一响应者?

[英]How to Get Current First Responder from Window Controller in Cocoa?

我想在窗口中找到第一响应者视图。 为此,我想实现一个这样的类别:

    @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];
        }

-[NSWindow firstResponder]有什么问题,它直接返回第一响应者?

如果您只想要第一响应者,请使用NSWindowfirstResponder方法。

如果您希望特定操作的第一响应者(例如mouseDown: ),您可能需要使用 NSApplications targetForAction:方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM