рефакторинг аналогичного кода, нацеленного на панель навигации всех контроллеров представления - PullRequest
0 голосов
/ 26 июля 2010

Я пытаюсь найти лучший способ реорганизовать это. Прямо сейчас каждый из контроллеров представления (около 20 из них) имеет функцию, которая инициализирует содержимое панели инструментов / панели навигации, например,

- (void) панель инструментовInit

и на каждом из контроллеров viewDidLoad вы увидите, что функция вызывается, т.е. [self toolbarInit];

В основном то, что делает этот toolbarInit, это помещает кнопку loginButton в rightBarButtonItem панели навигации.

Должен ли я:

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

б. создать панель инструментов контроллера или что-то и просто поместить туда весь код установки / код входа в систему?

Большое спасибо за любые другие предложения.

1 Ответ

1 голос
/ 26 июля 2010

Я бы рассмотрел один из следующих вариантов:

  • Звучит так, как будто вы неоднократно помещаете одни и те же или похожие UIViewControllers в стек. Возможно ли, что они все происходят от одного и того же подкласса UIViewController? Если это так, инициализация может происходить в суперклассе, совместно используемом всеми примерно 20 элементами стека.

  • Если контроллеры представления имеют разные суперклассы, рассмотрите возможность определения категории в UIViewController, которая обрабатывает создание и добавление ваших кнопок. Тогда вам нужно только импортировать заголовок и вызвать тот же [self toolbarInit] в viewDidLoad.

  • То же, что и выше, за исключением того, что вместо использования категории создайте отдельный класс для обработки настроек, подобных этой. Логика в toolbarInit может застревать в методе класса, таком как setupNavigationItem:.

...