Шаблон iOS для контроллера панели вкладок: просмотр контроллеров с общей функциональностью

#ios #objective-c #design-patterns #uiviewcontroller #uitabbarcontroller

#iOS #objective-c #шаблоны проектирования #uiviewcontroller #uitabbarcontroller

Вопрос:

Я использую раскадровки, iOS 7 SDK, Xcode 6 Brta.

У меня есть UITabBarController.

Он имеет две связи с раскадровкой:

(1) Связь с UINavigationController 1, в который встроен контроллер представления 1.

(2) связь с UINavigationController 2, в который встроен контроллер представления 2.

Каждый контроллер представления имеет общий набор элементов пользовательского интерфейса в каждой из своих панелей навигации. например, кнопка параметров, кнопка обновления и т. Д.

То, что делают эти кнопки, одинаково в каждом контроллере представления, но зависит от конкретного контроллера представления и его настроек раскадровки.

Например:

Пользователь нажимает кнопку параметров [на панели навигации] контроллера представления 1, и произойдет переход xx1, вызывающий переход от контроллера представления 1 к контроллеру представления параметров.

или…

Пользователь нажимает кнопку параметров [на панели навигации] контроллера представления 2, и произойдет переход xx2, вызывающий переход от контроллера представления 2 к контроллеру представления параметров.

(В этом случае каждый контроллер представления вызовет отображение одного и того же пользовательского интерфейса Options, но через разные переходы.)

Очевидно, что это дублирует функциональность, усложняет и не масштабируется.

Как мне следует приступить к разработке / рефакторингу этого, чтобы нажатие кнопки, которая появляется в 2 или 3 или n контроллерах представления, имело одинаковое поведение в каждом, но без дублирования кода и запутывания раскадровки?

Существует ли типичный шаблон для этого? Приветствия.

Ответ №1:

Одним из вариантов было бы создать суперкласс для viewController1 и ViewController2, где вы реализуете логику для общего поведения (например, кнопка options) и указываете общие элементы дизайна, в этом случае у вас не было бы избыточного кода, и вы могли бы просто добавить больше контроллеров представления в контроллер панели вкладок, снова подклассировав.

Комментарии:

1. Большое вам спасибо, Николай. Это предложение соответствует всем требованиям. Большое приветствие.