打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ios 协议的理解 block可以取代delegate

ios 协议的理解 block可以取代delegate

(2013-08-08 11:22:42)
标签:

ios

协议

it

block

delegate

分类: iOS
协议是帮助两个对象通信的一种模式,当某对象无法完成某事件时,建立委托协议,通过另外一个对象实现协议内容,然后自身调用该协议方法。
常用步骤如下:
1、声明协议

@protocol Buttonelegate;

2、定义协议变量协议方法

  • 定义变量 一般用assign修饰

@property(nonatomic,assign id<</span>Buttonelegate>delegate;

@end

@synthesize delegate;

  • 定义方法

@protocol Buttonelegate <<span style="color: #703daa">NSObject>

-(void)buttonsave:(NSIndexPath *)IndexPath;

@end


3、在委托类中添加协议,设置协议,实现协议方法

 

  • 添加

@interface firstview : UITableViewController<</span>Buttonelegate>

 

  • 设置 

UITableViewCell *cell=sender;

    secondview *view=segue.destinationViewController;

    view.delegate=self;

  • 实现

-(void)buttonsave:(NSIndexPath *)IndexPath

{

    UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:IndexPath];

    cell.detailTextLabel.text=@"已评估";

    [self.navigationController popViewControllerAnimated:YES];

}

4、调用协议方法

if ([self.delegate respondsToSelector:@selector(buttonsave:)])

    {

         [self.delegate buttonsave:path];

    }

代理是一对一的关系,而通知则是一对多的关系。

代理的实现代码比较多,简单得传值可以用block代替
//定义声明block 相当于delegate的声明

@property (nonatomic, copy) void(^doTransferMsg)(NSString *_msg);

//发送消息 

if(self.doTransferMsg)

    {

        self.doTransferMsg(oneModel.chinese);

        self.doTransferMsg=nil;

 

    }

相当于 

 if ([self.delegate respondsToSelector:@selector(buttonsave:)])

    {

         [self.delegate buttonsave:path];

    }

//接受消息,预设

__weak CityViewController *cityVC=[HUDTooles getinstantiateViewControllerWithIdentifier:@"CityView" andstoryboardName:@"Main"];

    cityVC.list=citys;

    cityVC.tablelist=dictionary;

    [cityVC setDoTransferMsg:^(NSString * string) {

        [sender setTitle:string forState:UIControlStateNormal];

        [cityVC dismissViewControllerAnimated:YES completion:^{

            //

        }];

    }];

    [self presentViewController:cityVC animated:YES completion:^{

        //

    }];

相当于

  • 设置 

UITableViewCell *cell=sender;

    secondview *view=segue.destinationViewController;

    view.delegate=self;


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何在UINavigationBar上添加UISearchBar以及UISearchDisplayController的使用 OC iOS
iOS 中 TableView 内嵌套 CollectionView 动态高度的实现
Storyboards Tutorial in iOS 7 Part 2
【译】Swift 2.0 下面向协议的MVVM架构实践
15、点击加号,弹出控制器。使用代理
获取tableview的cell
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服