Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Cocoa中的窗口控制器获取当前的第一响应者?_Cocoa_Nsview_Categories_First Responder - Fatal编程技术网

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

如何从Cocoa中的窗口控制器获取当前的第一响应者?,cocoa,nsview,categories,first-responder,Cocoa,Nsview,Categories,First Responder,我想在窗口中找到first responder视图。为此,我想实现如下类别: @implementation NSView (ViewExtensions) - (NSView *)findFirstResponder { if ([self isFirstResponder]) { return self; } for (NSView *subView in [self subviews]) { NS

我想在窗口中找到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
以上代码基于此问题/答案,因此:

问题可能在于nsrresponder不像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
方法


如果您希望某个特定操作的第一响应者(如
mouseDown:

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

我不认为这是我想要的。我想让“isFirstResponder”在这个类别中工作。我并不是在寻找对用户点击的响应。我只提到,因为当用户单击表视图中的某个项目时,我假设它会成为第一个响应者。我所要做的就是以编程方式查找第一响应者。我想知道他们是怎么做到的:
-[NSWindow firstResponder]
返回一个nsrresponder。如何获取作为第一响应者的NSView?然后,如果(firsResponderView==MyTableView),我可以执行
,即测试一个视图是否是当前的第一个响应程序?一个视图是否是响应程序–
NSView
继承自
nsrresponder
。因此,您的
if
语句将正常工作。对于一般情况,如果([firstResponder isKindOfClass:[NSView class]]){NSView*firstResponderView=(NSView*)firstResponderView;/*使用firstResponderView*/}可以执行