Проблема с вкладкой в ​​поле при добавлении и удалении представления

У меня есть панель области, содержащая NSSearchField. Панель может быть показана и скрыта с помощью пункта меню. Я генерирую эту панель, создавая новый NSViewController (и загружая новое представление из XIB). Когда панель отображается, я делаю addSubview: для contentView окна; когда панель скрыта, я делаю removeFromSuperview для представления в контроллере представления.

Если, когда я запускаю приложение, а панель уже открыта, при нажатии на вкладку происходит переключение между основным видом в окне (представлением таблицы) и полем поиска на панели области. Если я запускаю приложение, а панель еще не отображается, как только я показываю панель, я могу переходить из представления таблицы в поле поиска, но не наоборот.

Как только я удаляю панель области в первый раз, а затем снова показываю ее, я больше не могу переходить между полем поиска и представлением таблицы, независимо от того, какое представление выбрано в данный момент.

Есть ли что-то, что мне нужно сделать помимо addSubview: и removeFromSuperview? Я не могу понять, почему это не сработает, и особенно почему у меня разное поведение, отображается ли полоса при запуске или нет.


person livings124    schedule 30.05.2011    source источник


Ответы (2)


Вам нужно установить nextKeyView для обоих представлений, если вы хотите контролировать то, что происходит, когда вы нажимаете клавишу табуляции.

[yourTableView setNextKeyView:yourSearchField];
[yourSearchField setNextKeyView:yourTableView];

Однако вам нужно быть осторожным, потому что вы можете разорвать автоматически созданный цикл просмотра ключей. В этой статье более подробно описано, как действовать в этой ситуации.

person Rob Keniger    schedule 30.05.2011
comment
Кажется, это работает, но становится чрезвычайно сложно управлять многими представлениями (и желанием поддерживать постоянный порядок). - person livings124; 31.05.2011

Я смог добиться желаемого поведения, установив для параметра setAutorecalculatesKeyViewLoop: значение true в окне представлений.

person livings124    schedule 31.05.2011
comment
Конечно, вы также можете вызвать -[NSWindow recalculateKeyViewLoop] вручную после добавления/удаления представлений. - person jrc; 09.11.2012