2010-03-27 5 views
0

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

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

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

Это кажется концептуально правильным, но, похоже, вызывает проблемы. Скажем, у меня есть кнопка, которая при нажатии на нее меняет текст ярлыка. Таким образом, контроллер не знает, что имя переменной метки в обработчике событий 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, и я использую его неправильно.

+0

«Итак, у контроллера нет понятия того, какое имя переменной метки находится в обработчике событий OnTouchUp для моей кнопки. Поэтому я создаю для нее @property. Но поскольку свойство MainViewController.view не является типа MyView, я получаю предупреждения или ошибки всякий раз, когда пытаюсь получить доступ к этим свойствам из контроллера представления ». - пожалуйста, не могли бы вы разместить соответствующий код? –

ответ

2

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

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

+0

, поэтому, если я поместил все на ViewController, в чем смысл иметь класс вида в первую очередь? Если я просто помещаю все в ViewController? – Joel

+2

Точка класса View - это рисовать материал на экране и получать события касания. В большинстве случаев вы используете классы представления Apple, вы должны писать только свои собственные для пользовательского виджета или если вы пишете игру. – benzado

+0

О, ладно. Я был просто смущен тем, для чего был использован вид. Наверное, у меня есть код для исправления. Это имеет гораздо больший смысл. Спасибо за разъяснение. – Joel

Смежные вопросы