Design Pattern - Objective-C - MVC Model View Controller

后端 未结 2 355
Happy的楠姐
Happy的楠姐 2021-02-03 15:20

Hi I already read tutorials around the web on MVC and already read the topics on here. I think i got the concept of the MVC but i\'m not sure of its implementation.

I\'v

相关标签:
2条回答
  • 2021-02-03 15:37

    Simply: UIViewController is not your view, it's your controller

    Think of the UIViewController as a puppeteer and the UIView as the puppet.

    • UIViewController controls WHAT is displayed on the UIView
    • UIView's main purpose is to contain subviews.
    • NSObject can be used by any class, but should be used by the UIViewController.

    Admittedly, I understood it much better after completing codeschool's tutorial http://www.codeschool.com/courses/try-ios. I highly recommend this simple hands-on approach.

    Let's break it down:

    Note: Here we utilize @property declarations instead. These will save you from writing your own setter and getter methods. (unless you need to override them for custom functionality)

    NSObject (model):

    //MyModelObject.h
    #import <Foundation/Foundation.h>
    
    @interface MyModelObject : NSObject
    
    @property (nonatomic) int count; 
    
    @end
    

    UIView (view):

    //MyView.h
    #import <UIKit/UIKit.h>
    
    @interface MyView : UIView
    
    // holds it's own subviews
    @property (strong, nonatomic) UIView *anotherView;
    @property (strong, nonatomic) UIImageView *myImageView;
    
    @end
    

    UIViewController (controller, it all comes together here!):

    //MyViewController.h
    #import <Foundation/Foundation.h>
    
    #import "MyView.h"  // your custom view
    #import "MyModel.h" // your custom model
    
    @interface MyViewController : UIViewController
    
    @property (strong, nonatomic) MyView *myView 
    // see how the view is "owned" by the view controller?
    
    @end
    
    
    
    //MyViewController.m
    
    @implementation MyViewController 
    
    @synthesize myView;
    
    
    - (void) someMethod {
    
        [myView doSomething]; 
    
    }
    
    @end
    
    0 讨论(0)
  • 2021-02-03 15:44

    For whose have any doubt about where put the UI elements, I often like put the UI elements in View.m

    My strategy is make all methods to build UI elements in View.m, where I have a method that call all others methods in View.m. Thus, i call only one method in ViewController

    For example :

    TodayView.h

    #import <UIKit/UIKit.h>
    
    @interface TodayView : UIView
    @property (strong, nonatomic) UIImageView *imageView;
    @property (strong,nonatomic) UINavigationBar *navBar;
    
    
    -(void) addAllElements:(UIView*) mainView addController:(UIViewController*) controller;
    -(void) addImage:(UIImageView*) image view:(UIView*) todayView;
    -(void) addNavBar:(UIViewController*) navController addView:(UIView*)view;
    @end
    
    

    TodayView.m

    
    #import "TodayView.h"
    
    @implementation TodayView
    
    
    -(void) addImage:(UIImageView *)image view:(UIView *)todayView{
        image= [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
        image.image = [UIImage imageNamed:@"icone-apps"];
    
        [todayView addSubview:image];
    }
    
    -(void) addNavBar:(UIViewController *)navController addView:(UIView *)view{
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 80, 120, 50)];
           label.textAlignment = UITextAlignmentCenter;
           [label setFont:[UIFont boldSystemFontOfSize:40.0]];
           [label setBackgroundColor:[UIColor clearColor]];
           [label setTextColor:[UIColor blackColor]];
           [label setText:@"Hoje"];
           [navController.navigationController.navigationBar.topItem setTitleView:label];
           [view addSubview:label];
    
    }
    
    -(void) addAllElements:(UIView *)mainView addController:(UIViewController*)controller{
        [self addNavBar:controller addView:mainView];
    
    }
    
    @end
    
    
    

    TodayViewController.m

    
    #import "TodayViewController.h"
    @interface TodayViewController ()
    
    
    @end
    
    @implementation TodayViewController
    @synthesize myView;
    
    -(void) blankMethod{
    
    }
    
    -(void) addImage:(TodayView*)todayView{
        todayView.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
        todayView.imageView.image = [UIImage imageNamed:@"icone-apps"];
    
        [self.view addSubview:todayView.imageView];
    }
    
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = UIColor.whiteColor;
    
        TodayView *todayView = [[ TodayView alloc] init];
         # Here I call the method that call all others methods to build UI elements
        [todayView addAllElements:self.view addController:self];
    
    
    
    
    }
    -(UITabBarItem*) tabBarItem{
    
        return [[UITabBarItem alloc] initWithTitle:@"Hoje" image:[UIImage imageNamed:@"icone-hoje"] tag:0];
    }
    
    
    @end
    
    
    0 讨论(0)
提交回复
热议问题