В Objective-C без файла пера MVC, чтобы иметь логику вместе с представлением в том же классе? - PullRequest
0 голосов
/ 02 декабря 2011

Когда я работаю в Objective-C программно с nib-файлами, и у меня есть логика:

appViewController.m

в том же классепроисходит с этим представлением, а также с элементами просмотра?Это против шаблона MVC?

Нужно ли создавать другой класс и сообщать обоим классам?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Технически это идет вразрез с паттерном MVC.Ваши V и C и объединены в один объект.Вы можете разделить код, который обрабатывает макет и рисование, в отдельный подкласс UIView.Затем загрузите его с помощью loadView:

// MyViewController.m

- (void)loadView {
    MyView* myView = [[[MyView alloc] init] autorelease];
    myView.delegate = self;
    self.view = myView;
}


#pragma mark - MyViewDelegate Methods

- (void)myViewSaveButtonWasPressed:(MyView *)myView {
    // do something
}

Для связи между представлением и контроллером представления вы можете определить протокол делегирования.или что-то еще в том же духе) передать это делегату.ViewController должен соответствовать методу делегата и таким образом обрабатывать саму логику.

1 голос
/ 02 декабря 2011

Это зависит от вас! Если вы хотите разделить слои ( M, V, C ), вы можете создать свой собственный вид программно и, используя составной шаблон проектирования, встроить его в свой подкласс UIView , удалив чертеж. код от вашего контроллера. То есть ...

  • Вы создаете " CustomCompositeView ", который расширяет UIView
  • в layoutSubview (на основе UIView ) вы нарисуете все свои элементы пользовательского интерфейса
  • в вашем CustomViewController вы будете отображать свой вид с помощью loadView:

код:

- (void)loadView
{
CustomCompositeView *mainView = [[CustomCompositeView alloc] initWithFrame:aFrame];
[self setView:mainView];
[mainView release]; // remove this line if you are using ARC!
}
...