[英]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]
有什么问题,它直接返回第一响应者?
如果您只想要第一响应者,请使用NSWindow
的firstResponder
方法。
如果您希望特定操作的第一响应者(例如mouseDown:
),您可能需要使用 NSApplications targetForAction:
方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.