iPhone: правильное использование View и View Controller - PullRequest
0 голосов
/ 27 марта 2010

В последнее время я много занимался программированием на Objective-C и только начал заниматься разработкой для iPhone. Я много программировал с использованием MVC на других языках / фреймворках, но я просто хочу убедиться, что я правильно использую MVC в своей разработке для iPhone.

Я создал новое iPhone Utility Application, которое создает два вида: MainView и FlipsideView. Оба имеют контроллер (FlipsideViewController и MainViewController) и собственный файл XIB.

Что я делал, так это помещал переменные IBOutlet UIControl myControl в мои файлы MainView.h или FlipsideView.h, а затем привязывал элементы управления в Интерфейсном Разработчике к этим переменным. Затем я помещаю любые IBAction SomeAction myAction методы в файлы MainViewController.h и FlipsideViewController.h и связываю события с этими методами в Интерфейсном Разработчике.

Это кажется концептуально правильным, но, похоже, вызывает проблемы. Скажем, у меня есть кнопка, которая при нажатии изменяет текст метки. Таким образом, контроллер не имеет ни малейшего представления о том, что имя переменной метки находится в обработчике события OnTouchUp для моей кнопки. Поэтому я делаю @property для этого. Но поскольку свойство MainViewController.view не относится к типу MyView, я получаю предупреждения или ошибки, когда пытаюсь получить доступ к этим свойствам из контроллера представления.

Я делаю это правильно? Есть лучший способ сделать это? Если это правильно, как мне правильно работать с этими переменными, не получая предупреждений или ошибок?

Спасибо

Вот код, показывающий, что я делаю:

MainView.h

#import ...

@interface MainView : UIView
{
    IBOutlet UILabel* label;
    IBOutlet UIButton* button;
}

@property UILabel* label;
@property UIButton* button;

@end

MainViewController.m

-(void) buttonTouchUp:(id) sender
{
    self.view.label.text = @"The button was pressed!"; //This gives error because label is not in the view structure or union
    [self.view label].text = @"The button was pressed!"; //This gives a warning
}

Я знаю, что могу сделать вид подходящего типа, но это похоже на хакерскую работу. Я знаю, что могу жить с предупреждением, но предупреждение говорит мне, что я делаю то, чего, вероятно, не должен делать. Я не верю, что SDK заставит меня постоянно делать что-то подобное.

Должно быть, я просто неправильно понимаю, каким должен быть View, и я неправильно его использую.

1 Ответ

2 голосов
/ 27 марта 2010

Большая часть кода, который я видел и писал сам, сохраняет все выходы и действия на контроллере. Кнопка отправляет сообщение контроллеру (через IBAction), затем контроллер обновляет метку (через IBOutlet). Другими словами, показывать свои взгляды необычно.

Представления не должны быть связаны с другими представлениями, если у них нет особых отношений, например, кнопок назад / вперед, предназначенных для UIWebView ... но даже тогда вы обнаружите, что вам нужен контроллер для включения / отключения кнопок, необходимо.

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