Как избежать дублирование кода в двух базовых классах унаследованных от UIViewController и UITableViewController?

Суть вопроса:

У меня есть два базовых контроллера:

1.BaseController унаследованный от UIViewController

2.TableBaseController унаследованный от UITableViewController


Так получилось, что у этих базовых контроллеров есть методы которые повторяют зеркально друг друга

Пример:

— (void)loadView;

— (void)viewDidLoad;


Сейчас ломаю голову над тем, как убрать дублирование логики и что бы код был красивый.
  • Вопрос задан
  • 2986 просмотров
Пригласить эксперта
Ответы на вопрос 3
No_Time
@No_Time
Чего-то ничего не понятно. Вы хотите для 2х разных контроллеров сделать один лоад метод? Если да, то это чушь какая-то. Или я вас не правильно понял?

Так для справки: еще есть viewDidAppear, viewWillAppear, которые по вашей логике тоже почти повторяют друг друга.
Ответ написан
Pilot34
@Pilot34
Тоже заморачивался с этим вопросом. Самый простой способ — не наследоваться от UITableViewController, делать руками UITableView в обычном контроллере через xib. Там особой разницы не будет.
Ответ написан
Комментировать
pestrov
@pestrov
Вы можете просто создать категорию на NavigationBar, добавив в нее методы по полной кастомизации — добаление фона, кнопок, слайдеров, свой для каждого контроллера. Тогда во — (void)viewDidLoad вы сможете просто вызывать метод, кастомизирующий NavigationBar для этого контроллера.
Вызов будет выглядеть как-то так:
- (void)viewDidLoad {
[self.navigationController.navigationBar setBarForSmth];
}

Сама же категория будет представлять из себя следущее:
@interface UINavigationBar (NavigationBar)
-(void)setBarForCard;
@end


@implementation UINavigationBar (NavigationBar)

- (void)setBarForSmth
{

    UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"BarImage"]];
    aTabBarBackground.frame = CGRectMake(0,0,self.frame.size.width,44);
    [self sendSubviewToBack:aTabBarBackground];
//Ну и тут добавляеть контроллов по вкусу

Возможно, частенько вам придется это делать во viewWillAppear, а не viewDidLoad, так он не будет вызываться при переключении между контроллерами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы