mvc
使用 delegate 协议使得 传送数据的modal view controller在接收数据对象发生变化时 不需要改变,而只要接收方满足该协议即可
1 创建一个project 选择single view application 工程名 为 MVCExample
在story board 中拖入button 放在第一个view controller
2 选择file ->new file 创建 ModalViewController 并拖入一个view controller 在storyboard中设置custom class 为ModalViewController
2 将view controller 中的button 按住control键拖到modal view中 选择modal
3 拖一个label到viewcontronller中和拖一个 text filed到modal中 实现输入数据和显示 并在对应.h中设置相应的property
4 在modalviewcontroller中定义一个protocol
//定义一个委托协议 表明我这里有数据要显示
@protocol ModalViewControllerDelegate<NSObject>
-(void)ShowTheData:(id)sender;
@end
最后
ModalViewController.h 如下
//
// ModalViewController.h
// MVCExample
//
// Created by cxj on 14-7-24.
// Copyright (c) 2014年 cxj. All rights reserved.
//
#import <UIKit/UIKit.h>
//定义一个委托协议 表明我这里有数据要显示
@protocol ModalViewControllerDelegate<NSObject>
-(void)ShowTheData:(id)sender;
@end
@interface ModalViewController : UIViewController<UITextFieldDelegate>//为了实现在textfiled 中回车键盘消失继承了该协议
@property (weak, nonatomic) IBOutlet UITextField *InputTextFiled;
@property(nonatomic, weak) id<ModalViewControllerDelegate> delegate;//不关心什么类型,但要符合ModalViewControllerDelegate这个protocol 对象名为delegate 做为传递数据的作用
@end
对应的实现文件
// ModalViewController.m
// MVCExample
//
// Created by cxj on 14-7-24.
// Copyright (c) 2014年 cxj. All rights reserved.
//
#import "ModalViewController.h"
@interface ModalViewController ()
@end
@implementation ModalViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.InputTextFiled.text=@" ";
self.InputTextFiled.delegate=self;//实现回车键盘消失的响应
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)ButtonRerurn:(id)sender {
[self.delegate ShowTheData:self];
}
//UITextFieldDelegate method,used to dismiss keyboard 遵守 UITextFieldDelegate的意义
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
@end
7 接收数据的viewcontroller
//
// ViewController.h
// MVCExample
//
// Created by cxj on 14-7-24.
// Copyright (c) 2014年 cxj. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *ShowLabel;
@end
8 对应的
//
// ViewController.m
// MVCExample
//
// Created by cxj on 14-7-24.
// Copyright (c) 2014年 cxj. All rights reserved.
//
#import "ViewController.h"
#import "ModalViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//没有这个返回不了。。。不明白
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ToInput" ]){
ModalViewController *ivc=[segue destinationViewController];//并不会实例化 所以数据不可以从这里得到
ivc.delegate=self;//这个self 是viewcontroller
}
}
-(void)ShowTheData:(id)sender
{
ModalViewController*vvc=(ModalViewController*)sender;
NSString*data=vvc.InputTextFiled.text;
[self dismissModalViewControllerAnimated:YES];//不太明白这个函数的作用 将一个modalview dismiss了 ?
self.ShowLabel.text=data;
}
@end
注意
一开始要
#import "ModalViewController.h"
而且
ShowTheData
这个方法最终是在接收方那里实现体现mvc的思想是 提供数据的只提供数据 至于怎么用这些数据则由接收方去具体实现
=================================================================
大概就是这样,初学者。。。。希望有错误帮我指出来。。谢谢指教!!! 也希望对别人有用。。。
代码上传了。。。