Как сделать дочерние элементы управления представлением будут сосредоточены на Tab и Shift + Tab в NSViewController

Мне нужно обновить одно существующее приложение и разделить его существующий пользовательский интерфейс на отдельные NIB. Я планирую начать с создания отдельных NIB и NSViewController для всех моих разделенных пользовательских интерфейсов. Теперь проблема в том, что мой NSViewController не отвечает на события клавиатуры TAB и SHFIT + TAB, я просто хочу, чтобы мой NSViewController установил фокус на соответствующий дочерний элемент управления в моем динамически загружаемом представлении NSViewController, когда пользователь нажимает TAB или SHIFT + TAB.

Спасибо,

РЕДАКТИРОВАТЬ: следующее мое требование.

У меня есть три дополнительных представления, которые мне нужно загружать динамически и переключаться с помощью NSPopupButton в моем заполнителе NSBox MainWindow.

Для проверки я создал новое приложение какао и добавил по одному NSPopupButton и NSBox в Window и присоединился к выходам для NSPopupButton и NSBox.

Во-вторых, я создал три новых NSViewController с тремя разными NIB, содержащими отдельные настраиваемые представления, содержащие два или три дочерних элемента управления NSTextField.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
}

В основной функции делегата приложения я добавляю все три NSViewController в массив, а затем заменяю представления с помощью replaceSubview для замены представлений в заполнителе NSBox.

Я добавил следующий код во все три NSViewController, но я все еще не сосредотачиваюсь на дочерних элементах управления, нажимая клавиши TAB или SHIFT + tab.

- (void)loadView {
    [super loadView];

    // store the responder that’s right after the view in the responder chain
    NSResponder *nextResponder = [[self view] nextResponder];

    // set the view controller (self) as the next responder after the view
    [[self view] setNextResponder:self];

    // set the stored responder as the next responder after the view controller
    [self setNextResponder:nextResponder];
}

person AmitSri    schedule 16.02.2011    source источник
comment
Кроме того, я также присоединился к nextKetView к первому NSTextField каждого настраиваемого представления во всех трех NIB.   -  person AmitSri    schedule 16.02.2011


Ответы (1)


Несмотря на то, что NSViewController наследуется от NSResponder, Cocoa не добавляет автоматически NSViewController экземпляров в цепочка респондентов. Это нужно делать самому.

Одно из возможных решений - вставить ваш контроллер представления в цепочку респондентов между представлением, которым он управляет, и следующим респондентом этого представления. Например, в вашей реализации контроллера представления,

- (void)loadView {
    [super loadView];

    // store the responder that’s right after the view in the responder chain
    NSResponder *nextResponder = [[self view] nextResponder];

    // set the view controller (self) as the next responder after the view
    [[self view] setNextResponder:self];

    // set the stored responder as the next responder after the view controller
    [self setNextResponder:nextResponder];
}
person Community    schedule 16.02.2011
comment
Привет, спасибо за ответ. Я отредактировал свой вопрос с более конкретными требованиями. Пожалуйста, посмотрите и предложите мне решение. - person AmitSri; 16.02.2011
comment
@AmitSri Вам необходимо вставить свой контроллер представления в цепочку респондентов всякий раз, когда вы заменяете подпредставление. Не забудьте удалить предыдущий контроллер представления из цепочки респондентов. - person ; 16.02.2011
comment
Я ценю вашу помощь, дайте мне знать, если вы предоставите мне ссылку или образец кода для вышеуказанного требования. - person AmitSri; 16.02.2011