iOS 演示 Modal Segue 的使用,包括参数如何从呈现者传递到 ModalView 以及数据如何从 ModalView 传回呈现者(利用委托对象)

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的思想是  提供数据的只提供数据 至于怎么用这些数据则由接收方去具体实现


=================================================================

大概就是这样,初学者。。。。希望有错误帮我指出来。。谢谢指教!!!  也希望对别人有用。。。

代码上传了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值