ウィンドウで最初の応答者ビューを見つけたいと思います。これを行うには、次のようなカテゴリを実装したいと思います。
@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' に応答しない可能性があります」というデバッグ メッセージが表示されます。
Cocoa で findFirstResponder を機能させるにはどうすればよいですか?
詳細情報: 後でウィンドウ コントローラーで上記のメソッドを次のような方法で使用したいと思います。
NSArray *copiedObjects;
if ([[self window]contentView] == MyTableView) {
copiedObjects = [tableController selectedObjects];
}
if ([[self window]contentView] == MyOutlineView) {
copiedObjects = [treeController selectedFolders];
}