代理传值:

//  SendViewController.h
#import <UIKit/UIKit.h>
@protocol SendInFor <NSObject>
-(void)sendInForIdea:(NSString*)text;
@end
@protocol SendInForTwo <NSObject>
-(void)sender:(NSString*)text;
@end @interface SendViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
@property(nonatomic,retain)id <SendInFor> delegate;
@property(nonatomic,retain)id <SendInForTwo> delegateB;
@property(nonatomic,retain)NSIndexPath*indexPath; @e代理

代理方法

#import "SendViewController.h"

//代理传值
@interface SendViewController ()
{
UITableView*table;
NSMutableArray*data;
}
@end @implementation SendViewController - (void)viewDidLoad {
[super viewDidLoad];
data=[[NSMutableArray alloc]init];
table=[[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
table.delegate=self;
table.dataSource=self;
[self.view addSubview:table];
for (int i=; i<; i++) { NSString*string=[[NSString alloc]initWithFormat:@"数据%d",i];
[data addObject:string];
}
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [data count];
} -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return ;
} -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *str=@"str";
UITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:str];
if (cell==nil) {
cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:str];
}
// cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
UIImageView *norImage=[[UIImageView alloc]initWithFrame:CGRectMake(, , , )];
[norImage setImage:[UIImage imageNamed:@"image"]]; cell.textLabel.text=[data objectAtIndex:indexPath.row];
//点击单元格 变换背景图片
if ([_indexPath isEqual: indexPath]) { cell.accessoryType = UITableViewCellAccessoryCheckmark;
cell.backgroundColor=[UIColor redColor];
cell.accessoryView=norImage ; /* 可以自定义图片 按钮 文本
cell.accessoryType=btn;
cell.accessoryType=label;
*/
}
else{
cell.accessoryType = UITableViewCellAccessoryNone;
cell.backgroundColor=[UIColor whiteColor];
cell.accessoryView=nil ;
}
return cell;
} -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self.delegate respondsToSelector:@selector(sendInForIdea:)]) { _indexPath = indexPath;
[self.delegate sendInForIdea:[data objectAtIndex:indexPath.row]];
[table reloadData]; // cell.imageView.image=[UIImage imageNamed:@"2"];
//延迟操作 延迟跳转时间
[self performSelector:@selector(pressBtn) withObject:nil afterDelay:]; //点击获取的 cell cell变色
// UITableViewCell *cell = [table cellForRowAtIndexPath:indexPath];
// cell.backgroundColor=[UIColor cyanColor];
}
}
-(void)pressBtn
{ [self.navigationController popViewControllerAnimated:YES]; }

具体方法

block反向传值:

//  FirstViewController.h

#import <UIKit/UIKit.h>
//直接回车,第一个参数是返回值类型,第二个为重定义的block名称,第三个为要传参数类型和参数名;然后需要定义重定义block类型的属性,并且实现参数为该重定义类型block的方法。
//typedef <#existing#> <#new#>;
//回调不加断点不容易找出错误
typedef void (^BlockColor)(UIColor *color);
typedef void (^BlockTitle)(NSString *title); @interface FirstViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
//block设置为属性,修饰符用copy,即使使用strong,编译器也会将strong处理成copy
@property(nonatomic,copy)BlockColor color;
@property(nonatomic,copy)BlockTitle Title; @endblock方法

block方法

//  FirstViewController.m

#import "FirstViewController.h"
#import "TableViewCell.h" //block 反向传值
@interface FirstViewController ()
{
UITableView *table;
NSMutableArray *data;
NSMutableArray *arr;
}
@end @implementation FirstViewController - (void)viewDidLoad {
[super viewDidLoad];
arr =[[NSMutableArray alloc]init];
for (int i=; i<; i++) {
NSString * str=[[NSString alloc]initWithFormat:@"数据%d",i];
[arr addObject:str];
} table=[[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
table.dataSource=self;
table.delegate=self;
[self.view addSubview:table]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [arr count]; } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
TableViewCell *customCell = (TableViewCell *)cell;
[UIView animateWithDuration: animations:^{
customCell.image.alpha = 1.0f;
}];
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ TableViewCell *cell=[[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:self options:nil] lastObject];
cell.Title.text=[arr objectAtIndex:indexPath.row]; //xib 中button不要设置点击事件 这样可以在cell里面调取按钮(点击单元格的按钮可以跳转)
cell.button.tag=indexPath.row;
[cell.button addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];
cell.image.image =[UIImage imageNamed:@""];
cell.image.alpha =0.2f;
return cell; } - (void)clickAction:(UIButton *)sender
{
NSInteger tag=sender.tag;
NSLog(@"block 传值");
// __weak typeof(self) weakSelf=self;
if (_Title) {
_Title([arr objectAtIndex:tag]);
}
if (_color) {
_color([UIColor redColor]);
}
[self.navigationController popToRootViewControllerAnimated:YES];
} - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"hello world"); TableViewCell *cell = [table cellForRowAtIndexPath:indexPath];
NSString *string = arr[indexPath.row];
NSLog(@"string=%@",string);
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return ;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

具体方法

调用:

//  RootViewController.h
#import <UIKit/UIKit.h>
#import "SendViewController.h"
@interface RootViewController : UIViewController<SendInFor>
#import "RootViewController.h"
#import "FirstViewController.h"
#import "SendViewController.h"
@interface RootViewController ()
{
FirstViewController *first;
SendViewController *send;
UIButton *btn;
UIButton *btn1;
}
@end @implementation RootViewController - (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title=@"test";
first =[[FirstViewController alloc]init];
send=[[SendViewController alloc]init];
send.delegate=self;
[self creatBtn]; } -(void)creatBtn
{
btn=[UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(, , , )];
[btn setBackgroundColor:[UIColor cyanColor]];
[btn setTitle:@"block传值" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(pressBtn) forControlEvents:UIControlEventTouchUpInside]; btn1=[UIButton buttonWithType:UIButtonTypeCustom];
[btn1 setFrame:CGRectMake(, , , )];
[btn1 setBackgroundColor:[UIColor cyanColor]];
[btn1 setTitle:@"代理传值" forState:UIControlStateNormal];
[btn1 addTarget:self action:@selector(pressBtn1) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
[self.view addSubview:btn1]; } -(void)pressBtn
{ //int a = 0; block 里面不能改变a的值(报错,block下面打印原来的值),但是可以将a的值赋给别人
//弱引用属性
//弱引用 self
__block __weak typeof(self) weakSelf = self;
__block __weak UIButton *_button = btn;
first.color=^(UIColor *color){
_button.backgroundColor=color; }; first.Title=^(NSString *title){
weakSelf.navigationItem.title=@"block传值";
//强引用
// [btn setTitle:title forState:UIControlStateNormal];
//弱引用
[_button setTitle:title forState:UIControlStateNormal]; };
[self.navigationController pushViewController:first animated:YES];
} -(void)pressBtn1
{
[self.navigationController pushViewController:send animated:YES];
} -(void)sendInForIdea:(NSString *)text
{
[btn1 setTitle:text forState:UIControlStateNormal];
self.navigationItem.title=@"代理传值";
}

代理和block反向传值的更多相关文章

  1. block 反向传值回调

    /** *  block 反向传值回调 */ //在第二个控制器中 //   (1)声明block,在基类中已写好 //   (2)写好传值方法 //(1) typedef void (^Return ...

  2. 代理和 block 传值的使用

    // // ZYViewController.h // BlockTest // // Created by yejiong on 14/11/2. // Copyright © 2014年 zzz. ...

  3. IOS Block 反向传值

    1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结 ...

  4. iOS中的代理和Block

    一.代理(Delegate) 1)含义 iOS中的代理,比如父母要去上班,到中午12点了,需要给宝宝喂饭吃,但是父母正在上班,这时需要有一个人来帮忙完成一些事情(需要有个保姆来帮忙给宝宝喂饭),此时, ...

  5. iOS 再谈 代理传值,block反向传值

    本贴的例子是:有A和B两个界面,要实现的效果就是先让A跳转到B,然后B中有个颜色的参数,当B跳转到A时,把这个颜色的参数传递给A,在A中利用这个颜色改变自己界面的颜色. 第1步:在发送者(界面B)中, ...

  6. 使用代理和block写一个alertView

    代理: MyAlertView.h: @property (nonatomic,assign)id delegate; @protocol MyAlertViewDelegate <NSObje ...

  7. Swift基础--通知,代理和block的使用抉择以及Swift中的代理

    什么时候用通知,什么时候用代理,什么时候用block 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了 代理 : 父子关系,监听 ...

  8. 使用block进行界面之间的反向传值

    目标:在两个独立的控制器的界面之间进行反向传值 关键技术:block 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/story ...

  9. iOS Block界面反向传值

    在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C ...

随机推荐

  1. kvm NET 和 BRIDGE

    net: <interface type='network'> <mac address='52:54:00:e1:ac:43'/> <source network='d ...

  2. 联系旭日150安装CentOS5.X版本手记

    有一台旧电脑.想装个Linux.于是上网查了查.据说可以装CentOS5.3.于是我就去下载了一个. 下载地址可以到http://www.centoscn.com/去下载. 我先下载的是5.3版本的I ...

  3. Java Hour6

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为5 Hour,请各位不吝赐教. Hour6 Jav ...

  4. phpcms筛选功能

    phpcms论坛的看到的-----做筛选功能-----自定义函数 <?php /** * extention.func.php 用户自定义函数库 * * @copyright (C) 2005- ...

  5. hdu 4280 最大流sap

    模板套起来 1 5 7 //5个结点,7个边 3 3 //坐标 3 0 3 1 0 0 4 5 1 3 3 //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 2 ...

  6. hdu 3507 斜率dp

    不好理解,先多做几个再看 此题是很基础的斜率DP的入门题. 题意很清楚,就是输出序列a[n],每连续输出的费用是连续输出的数字和的平方加上常数M 让我们求这个费用的最小值. 设dp[i]表示输出前i个 ...

  7. Digital Image Processing 学习笔记3

    第三章 灰度变换与空间滤波 3.1 背景知识 3.1.1 灰度变换和空间滤波基础 本章节所讨论的图像处理技术都是在空间域进行的.可以表示为下式: $$g(x, y) = T[f(x,y)]$$ 其中$ ...

  8. [整理]android中几种常见的尺寸

    获取屏幕宽高尺寸的三种代码形式 在Android上,目前我知道的获取屏幕尺寸的方法有三种不同的代码形式 方法1.在Activity中最常见的调用方式 WindowManager windowManag ...

  9. .Net的后台服务技术有哪些?

    ashx(一般处理程序)WCFWebServiceASP.NET Web API 1 ashx(一般处理程序) 一 般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展 ...

  10. 电赛总结(四)——波形发生芯片总结之AD9854

    一.特性参数 ·300M内部时钟频率 ·可进行频移键控(FSK),二元相移键控(BPSK),相移键控(PSK),脉冲调频(CHIRP),振幅调制(AM)操作 ·正交的双通道12位D/A转换器 ·超高速 ...