Базовый класс контроллера Common View

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

Важно отметить, что я хочу иметь возможность добавить эту функциональность как к подклассам UIViewController, так и к подклассам UITableViewController, но я не могу вставить себя в иерархию классов UITableViewController, поэтому мне нужны BaseUIViewControllerи BaseUITableViewController, но если я это сделаю, мне придется дважды вносить изменения и синхронизировать их.

Как лучше всего иметь единое место для общего кода, который должен быть доступен как для подклассов BaseViewController, так и для подклассов BaseTableViewController? Мне нужно только одно место в моем коде, где мне придется иметь дело с общими задачами.

1 )Я думал об использовании категории с ассоциативными ссылками , но проблема здесь в том, что мне нужна пользовательская реализация классов жизненного цикла ViewController, таких как viewDidLoad :, а это не отличная идея.

2 )Я мог бы полностью пропустить UITableViewControllerи создать свой собственный BaseTableViewControllerиз BaseViewController, реализовавtableViewdelegate& datasourceсам, но я не очень хочу пропускать здесь реализацию контроллера Apple.

3 )Я мог бы иметь BaseViewController, наследующий от UIViewController, BaseTableViewController, наследующий от UITableViewController, и просто помещать вызовы пользовательских методов в третий файл ViewControllerBaseMethods, который можно вызывать из обоих файлов «базы». Дублирование свойств все равно может быть, но по крайней мере код метода будет в одном месте.

Любые другие хорошие подходы для этого типа вещей?

21
задан lu yuan 23 July 2012 в 10:10
поделиться