#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. Большое вам спасибо, Николай. Это предложение соответствует всем требованиям. Большое приветствие.