Я хотел бы найти вид первого респондента в окне. Для этого я хотел бы реализовать категорию, подобную этой:
@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: Получить текущий первый ответчик без использования частного API.
Проблема, возможно, в том, что у NSResponder нет метода isFirstResponder, как у UIResponder. Каков эквивалент NSResponder?
Если приведенный выше метод реализован, как указано выше, я, конечно, получаю отладочное сообщение: «'NSView' может не отвечать на 'isFirstResponder'».
Как заставить findFirstResponder работать в Cocoa?
Дополнительная информация: Позже я хотел бы использовать вышеупомянутый метод в моем оконном контроллере каким-то образом, например:
NSArray *copiedObjects;
if ([[self window]contentView] == MyTableView) {
copiedObjects = [tableController selectedObjects];
}
if ([[self window]contentView] == MyOutlineView) {
copiedObjects = [treeController selectedFolders];
}