Какова рекомендуемая практика создания представления вкладок с несколькими вкладками в настольном приложении Cocoa?

Какова рекомендуемая практика для создания представления вкладок с несколькими вкладками. Должен ли я использовать один файл XIB для всех представлений или иметь разные XIB для каждого представления? я предпочитаю использовать несколько контроллеров для каждого представления в виде вкладок и, следовательно, разные файлы xib. Как я могу достичь этого? Возможно ли иметь несколько представлений в одном файле xib для каждого представления вкладки, каждый из которых имеет разные контроллеры?


person Sanjay Arora    schedule 12.03.2012    source источник


Ответы (2)


Вкладки всегда одинаковые или они динамические? Если они всегда одинаковы, я обычно использую один xib-файл просто потому, что это просто. Вы по-прежнему можете использовать несколько объектов контроллера — просто сделайте их подклассами NSObject и поместите их все в один и тот же xib.

Я быстро поискал в Google, есть ли простой способ использовать NSViewControllers с вкладками, и нашел эта тема. Он содержит некоторый пример кода для их использования, что даст вам отдельный класс контроллера и xib для каждой вкладки. Очевидно, я не пробовал этот код, поэтому не могу за него поручиться, но для начала это может быть достаточно хорошим. (В этом примере кода он создает новый контроллер представления каждый раз, когда вы переключаете вкладки, что, вероятно, не то, что вам нужно — если бы это был я, я бы создавал их экземпляры при первом переключении на вкладку, а затем сохранял их. в словаре в контроллере окна, а при последующих переключениях просто вытащите соответствующий контроллер представления, который уже существует.)

person Amy Worrall    schedule 12.03.2012

Оптимальный подход зависит от сложности ваших вкладок. Однако XIB скоро станет беспорядочным и загроможденным, если вы добавите в него несколько представлений. Также вы рискуете получить раздутый контроллер.

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

У вас будет основной контроллер (окно или представление), который обрабатывает представление (или окно), в котором содержится ваша вкладка. Этот контроллер действует как делегат для вашего NSTabView (см. NSTabViewDelegate).

Как только ваш контроллер получит сообщение tabView:didSelectTabViewItem:, вы можете создать подчиненный контроллер, который будет управлять этой конкретной вкладкой. Этот контроллер создаст связанное с ним представление (initWithNib) и добавит его в иерархию представлений. Вы можете повторить этот процесс для каждой вкладки в представлении вкладок. Вы можете настроить все таким образом, чтобы главный (верхний) контроллер поддерживал список каждого подчиненного контроллера, поэтому вам нужно создать их только один раз.

person Roger    schedule 13.03.2012