Реализация iOS MVC с пользовательскими представлениями

Когда представления простые, их IBActions и IBoutlets находятся в контроллере представления, контроллеры представления назначают соответствующие модели для загрузки, а контроллер представления получает уведомление, когда модели подготовлены.

Поскольку мой проект содержит множество пользовательских представлений для каждого контроллера представления, я хочу реализовать действия в самом пользовательском представлении и установить данные из контроллера (ViewController). Я должен иметь возможность использовать одни и те же контроллеры и модели для iPhone и iPad, где меняется только пользовательский интерфейс.

Меня беспокоит, как передавать данные из представления в контроллер представления и отображать данные обратно в представлении при изменении модели?

Может ли кто-нибудь предложить мне передавать данные между представлениями ‹---> viewcontroller (контроллер) ‹---> модель?


person satyanarayana    schedule 17.07.2014    source источник


Ответы (2)


Для этого я использую шаблон дизайна Delegate. Это выглядит так:

MyView.h

@protocol MyViewDelegate <NSObject>
- (void)customViewDidSomething;
@end

@interface MyView : UIView

@property (nonatomic, assign) id<MyViewDelegate> delegate

@end

MyView.m

- (void)userDidSomething {
   [_delegate customViewDidSomething];
}

Мивиевконтроллер.h

#import "MyView.h"

// ViewController has to implement the protocol
@interface MyViewController <MyViewDelegate>

@property (nonatomic, retain) IBOutlet MyView myView;

MyViewController.m

- (void)viewDidLoad { // Set the delegate somewhere
   _myView.delegate = self
}

- (void)customViewDidSomething {
   // Ok VC is aware that something happened
   // Do something (tell subview to do something ?)
}
person KIDdAe    schedule 17.07.2014
comment
Большое спасибо. Мне это помогло. - person satyanarayana; 17.07.2014

Вместо того, чтобы использовать различные пользовательские представления, попробуйте использовать UIViewController, а затем используйте представление контроллера представления для отображения вашего пользовательского интерфейса. Кроме того, это также гарантирует, что вы сможете эффективно общаться между представлениями и контроллером без путаницы.

person NKB    schedule 17.07.2014