satyanarayana
satyanarayana

Reputation: 275

iOS MVC implementation with custom views

When the views are simple, their IBActions and IBoutlets are in viewcontroller, viewcontrollers assigns respective models to be loaded and viewcontroller get notified when models are prepared.

As My project contains lot of custom views for each viewcontroller, I want to implement actions in custom view itself and set data from controller (ViewController). I should be able to use the same controllers and models for both iPhone and iPad where only UI changes.

I am concerned about how to pass data from view to viewcontroller and displaying data back on view when model changes?

Can anyone please suggest me to pass data between views <---> viewcontroller (controller) <---> model?

Upvotes: 1

Views: 157

Answers (2)

KIDdAe
KIDdAe

Reputation: 2722

To do this I use Delegate design-pattern. It looks like this :

MyView.h

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

@interface MyView : UIView

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

@end

MyView.m

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

MyViewController.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 ?)
}

Upvotes: 2

NKB
NKB

Reputation: 649

Instead of using different custom views, try using a UIViewController and then use the viewcontroller's view to display your UI. Also, this will also ensure that you will be able to communicate between the views and controller efficiently without confusion.

Upvotes: 0

Related Questions