如何从可可的窗口控制器中获取当前的First Responder? [英] How to Get Current First Responder from Window Controller in Cocoa?

查看:16
本文介绍了如何从可可的窗口控制器中获取当前的First Responder?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望在窗口中找到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]有什么问题?

这篇关于如何从可可的窗口控制器中获取当前的First Responder?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆