Поддержание чистоты MVC с программно написанным представлением - PullRequest
0 голосов
/ 17 апреля 2011

Я устал писать свое подпредставление программно, потому что я хотел иметь красивую закругленную кнопку с изображениями. Поэтому я написал myView.h и myView.m с методом init, который выглядит примерно так:

- (id)init 
{
  if (self = [super init]){
    redBlack = [UIImage imageNamed:@"redB.png"];
    redWhite = [UIImage imageNamed:@"redW.png"];

    redButton = [UIButton buttonWithType:UIButtonTypeCustom];
    redButton.frame = CGRectMake(20.0, 30.0, 130.0, 130.0);
    [redButton setBackgroundImage:redBlack forState:UIControlStateNormal];
    [redButton setBackgroundImage:redWhite forState:UIControlEventTouchDown];
    [redButton addTarget:self action:@selector(controller.colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [redButton setTag:0];
    [self.view addSubview:redButton];
.....

Проблема в том, что colorButtonPressed - это метод, который написан в моем ControllerView-Singleton. Я не знаю, правильно ли я это делаю, но на самом деле я хотел сохранить MVC настолько чистым, насколько это возможно. Это обычный способ сделать это так, и если это так, компилятор не позволяет мне написать controller.colorButtonPressed: in @selector?!? Или я должен указать программно написанное представление также в моем классе контроллера?

Надеюсь, эти вопросы звучат не слишком глупо!?
И заранее спасибо!

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Вместо

 [redButton addTarget:self action:@selector(controller.colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

должно быть:

 [redButton addTarget:controller action:@selector(colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
0 голосов
/ 17 апреля 2011

цель должна быть классом, в котором определен метод.

Если цель установлена ​​на "self", метод должен быть в том же классе.Из вашего кода видно, что метод находится в контроллере, что означает, что цель должна быть «контроллером», а селектор должен быть @selector (colorButtonPressed:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...