Как получить текущий первый ответчик от оконного контроллера в 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: Получить текущий первый ответчик без использования частного 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];
        }

9
задан Community 23 May 2017 в 10:29
поделиться