ios代理模式-(ViewControler之间传值)

1,新建Single View Application工程,新建SecondViewController

2,在SecondViewController中设置代理

  

#import <UIKit/UIKit.h>

@protocol secondViewControllerDelegate <NSObject>
- (NSString *)value;
@end

@interface SecondViewController : UIViewController

@property (nonatomic,assign) id <secondViewControllerDelegate> delegate;

@end

3,在ViewController中添加UIButton,绑定事件,用于跳转到SecondViewController,在ViewController中添加UITextField,用于输入需要传递的值

4,在ViewController中添加代理协议,设置SecondViewController的代理为ViewController,实现代理方法

代码如下:

#import "ViewController.h"
#import "SecondViewController.h"

@interface ViewController () <secondViewControllerDelegate>{
    UITextField *_textField;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //添加按钮
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 200, 300, 40)];
    btn.backgroundColor = [UIColor grayColor];
    [btn setTitle:@"ToSecondViewController" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(toSecondViewController) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];

    //添加textField
    _textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 300, 40)];
    _textField.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_textField];

}
- (void)toSecondViewController {
    SecondViewController *second = [[SecondViewController alloc] init];
    //设置SecondViewController的代理为ViewController自己
    second.delegate = self;
    [self presentViewController:second animated:YES completion:nil];
}

//实现代理方法

-(NSString *)value {
    return _textField.text;
}

@end

5,在SecondViewController中添加UIButton,绑定事件,用于返回到ViewController

6,在SecondViewController中添加UILabel,用于显示传递的值

代码如下:

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    // 添加label用于显示传递的值
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 300, 40)];
    label.text = [_delegate value];
    label.backgroundColor = [UIColor greenColor];
    [self.view addSubview:label];

    //添加按钮
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 200, 300, 40)];
    btn.backgroundColor = [UIColor blueColor];
    [btn setTitle:@"ToViewController" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(backFirstViewController) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}

- (void)backFirstViewController {
    [self dismissViewControllerAnimated:YES completion:nil];
}

@end

源码地址:https://github.com/rokistar/PassValueBetweenViewController

时间: 2024-10-12 20:06:51

ios代理模式-(ViewControler之间传值)的相关文章

iOS代理模式

iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式. 代理主要由三部分组成: (1)协议:用来指定代理双方可以做什么,必须做什么. (2)代理:根据指定的协议,完成委托方需要实现的功能. (3)委托:根据指定的协议,指定代理去完成什么功能. 代理使用步骤 1.申明一个协议  (这个写在需要被获取的对象里面,也可以单独写一个类) @protocol TextDelegate -(void)deliverFirsttext:(NSSt

iOS代理模式设置方法

代理模式通常用于解决类似这样的问题:我们通过界面A打开了界面B,但在应用进行的过程中,界面B有时候也需要和A主动联络,比如点击某个按钮时.一个比较好的办法是,让A成为B的代理,这样B就可以在需要的时候给A发送消息了. 代理模式的一个好处是,B实际上不需要了解A的任何事情,只要知道A是自己的代理就可以了.在这种模式下,B依然独立与A,实现了松耦合. 对象A是对象B的代理,对象B需要向A发送消息,设置方法分四步: 1.在对象B的.h中定义一个protocol代理协议,并声明一个协议的属性变量 2.让

IOS 代理模式 DELEGATE

代理模式:将我(类或结构体)需要来完成的工作交给另一个具备我所要求的能力的人(实现协议的对象)来执行 协议:具备哪些能力 例子:我要去买火车票,没时间买,委托黄牛买票 协议:买票 //: Playground - noun: a place where people can play import UIKit protocol BuyTicketProtocol { // 买票的需求---实际是我需要做的事情 func buyTicket ()-> AnyObject; } class MyTi

iOS 代理与block 逆向传值 学习

一般在项目中出现逆向传值的时候就需要用到代理.block 或者通知中心了.由于公司的项目底层封装的很好,所以项目做了三四个月就算碰到需要逆传的情况也不用自己处理.但是最近遇到了一个特别的情况就需要自己处理一下了,之前也在网上看了一下关于如何选择代理.block 或者通知中心.个人感觉代理和通知中心都比较简单,block稍为有点复杂.代理大家都会用,所以当时就选用了通知中心来处理.之后有一次公司的网实在太差了,出现了逆传数据失败的情况,引起了我的注意,打上断点之后才发现,通知中心的那个方法完全没有

iOS学习之页面之间传值的方式总结

传值三种场景: 1.属性传值(从前往后传) 需求:第二个界面标签显示第一个界面输入框文字. 第一步, 在前一个界面定义属性. (语义属性声明为copy); 第二步, 在进入下一个界面之前,给属性传入数据. 第三步, 在后一个界面读取数据. 2.代理传值(从后往前传) 需求: 第一步:在后一个界面定义协议;并且定义一个方法,有一个参数,参数类型和传值类型一样; 第二步:定义代理属性.语义特性为assign, 类型为id,并且服从协议.id<xxxdelegate>; 第三步:寻找代理对象,(在p

iOS block进行页面之间传值

#import <UIKit/UIKit.h> @interface FirstViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *contentTxtField; @end #import "SecondViewController.h" #import "FirstViewController.h" @interface FirstVi

iOS开发-代理模式

代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的访问,访问代理的方法A也就意味着访问对象的方法A,访问委托对象方法A执行的是可以是对象的方法B.从实际开发的角度看,委托属于代理模式的扩大版,并没有那么多的限制. 基础知识 代理模式相对比较简单,可以简单的看一下UML类图: 代理模式以便管理客户对对象的访问,管理访问的方式有很多种.远程代理管理客户

iOS中多视图的传值 属性传值和代理传值

首先创建两个类 ,FirstViewController和SecondViewController,都继承于UIViewController 1 #import "AppDelegate.h" 2 #import "FirstViewController.h" 3 4 @interface AppDelegate () 5 6 @end 7 8 @implementation AppDelegate 9 10 11 - (BOOL)application:(UIAp

ios俩个APP之间跳转、传值

两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的. 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址 3.需要跳转的时候 NSString *urlString = [NSString stringWithFormat:@"AppJumpSecond://%@",textField.text]; [[UIApplication sharedApplication] open