ios代理的使用,正向传值,逆向传值

#import <UIKit/UIKit.h>
#import "SubViewController.h"
@interface ViewController : UIViewController<SubViewControllerDelegate>

@end
#import "ViewController.h"

@interface ViewController ()
{
    SubViewController *_subViewController;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _subViewController = [[SubViewController alloc]init];

    self.view.backgroundColor = [UIColor orangeColor];
    _subViewController.delegate = self;
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(10, 30,200 , 30);
    [btn setTitle:@"跳转到SubViewController" forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];

    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeSystem];
    btn1.frame = CGRectMake(10, 100, 200, 30);
    [btn1 setTitle:@"让SubViewController 变色" forState:UIControlStateNormal];
    [btn1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(btn1Click) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn1];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)btn1Click
{
    _subViewController.view.backgroundColor = [UIColor redColor];
}
-(void)btnClick
{
    [self presentViewController:_subViewController animated:YES
    completion:^{

    }];
}

-(void)changeColoer
{
    self.view.backgroundColor = [UIColor purpleColor];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
#import <UIKit/UIKit.h>

@protocol SubViewControllerDelegate <NSObject>

-(void)changeColoer;

@end

@interface SubViewController : UIViewController
@property(nonatomic,weak)__weak id<SubViewControllerDelegate>delegate;

@end
#import <UIKit/UIKit.h>

@protocol SubViewControllerDelegate <NSObject>

-(void)changeColoer;

@end

@interface SubViewController : UIViewController
@property(nonatomic,weak)__weak id<SubViewControllerDelegate>delegate;

@end

这个小demo中我建立了两个视图控制器,一个是ViewController另一个是SubViewController

两个页面可以进行相互跳转

点击SubViewController 中的变色按钮可以将ViewController中的颜色改变

点击ViewController中的变色按钮也可以将SubView中的颜色改变

代理实质就是指针的传递

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 19:20:01

ios代理的使用,正向传值,逆向传值的相关文章

iOS-Block总结 &amp;&amp; 全面解析逆向传值

1.block的特点: block是C语言: block是一种数据类型.可以当做参数,也可以用做返回值:--总之,对比int的用法用即可(当然,定义的时候,最好跟函数对比): block是预先准备好的代码块.在需要的时候调用,(需要好好理解"需要时"): 2.定义block 有返回值.有参数:返回类型 ^(blockName)(参数) =  ^返回类型(参数列表){///代码 }: 无返回值.有参数:void ^(blockName)(参数) = ^(参数列表){///代码 }: 无返

iOS 代理与block 逆向传值 学习

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

iOS 中delegate的理解与使用(传值)

之前做了半年的iOS,刚入了门,又被拉去转战java,现在iOS的那位大佬离职了,又被弄过来维护app,之前对于iOS中的delegate一直都是半知半解,所以刚好趁着这个机会把我所了解的记下来,以便日后查阅. - delegate的理解 delegate, 也就是代理模式(设计模式的一种),我现在所了解的代理模式是,当我有事要做但是没空的时候,我就可以请别人帮下忙,我告诉你我要做什么,但是具体怎么做,那是你的事了,就比如说,我想去约个妹纸出来玩,但是自己刚好现在有事不能约,或者自己不好意思约,

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

iOS 页面间传值 之 单例传值 , block 传值

ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同一个对象,对象的属性相同,所以可以用来传值. block 传值 与 代理传值相似,主要用于第二个页面向第一个页面传值,block 传值具体步骤: 在第二个页面: 1.声明: block typedef void(^SendMessagerBlock) (NSString *str); 2.创建方法:

[ios]NSThread传值 NSValue传值

NSThread:http://www.cocoachina.com/bbs/read.php?tid=51873 NSValue:http://blog.sina.com.cn/s/blog_bf9843bf0101ehs1.html //NSThread 属于 Foundation框架-(void)startThread { MYClass c1(1,2,3); typedef struct _MyP { MYClass c1; int i; }MYP; MYP mp; pp.c1 = c1

iOS代理模式

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

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 代理反向传值

在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示.这是一个典型的反向传值的例子.这个例子的核心是:"在界面B的输入框中输入字符串,在界面A的label上显示".也就是说:"界面B委托界面A显示字符串,页面A是界面B的代理".委托方向代理方反向传值. 那么我们该怎么用代理设