IOS的代理模式
来源:互联网 发布:北京赛车pk10计划软件 编辑:程序博客网 时间:2024/06/05 09:08
代理(delegate)是iOS开发中常用的设计模式。我们借助于protocol可以很方便的实现这种设计模式。
代理官方文档解释:
代理是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象和程序中其他的对象进行交互。 主对象(这里指的是delegating object)中维护一个代理(delegate)的引用并且在合适的时候向这个代理发送消息。这个消息通知“代理”主对象即将处理或是已经处理完了某一个事件。这个代理可以通过更新自己或是其它对象的UI界面或是其它状态来响应主对象所发送过来的这个事件的消息。或是在某些情况下能返回一个值来影响其它即将发生的事件该如何来处理。代理的主要价值是它可以让你容易的定制各种对象的行为。注意这里的代理是个名词,它本身是一个对象,这个对象是专门代表被代理对象来和程序中其他对象打交道的。
一、框架中代理的使用
1、在UI控件中声明一个类型为id的delegate或是dataSource
@interface AppView ()<UIActionSheetDelegate>
2、调用该类型的代理方法,触发ActionSheet,然后编写这个按钮的响应代码
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{}
二、自定义代理
1、模型类中自定义代理
#import <UIKit/UIKit.h>@class AddVC,Contact;//定义代理协议@protocol AddContactVCDelegate <NSObject>@optional//必须使用的代理方法//方法名:名字+代理功能+所需传递的数据-(void)addContactViewController:(AddVC *)addContactVc didSaveContact:(Contact *)contact;@end@interface AddVC : UIViewController//定义代理属性@property(nonatomic,weak)id<AddContactVCDelegate> delegate;@end
2、模型类中进行调用
- (IBAction)save:(id)sender {//判断对象是否实现了代理方法 if([self.delegate respondsToSelector:@selector(addContactViewController:didSaveContact:)]){ //传递数据 Contact *contact = [[Contact alloc] init]; contact.name = self.nameLabel.text; contact.tel = self.telLabel.text; //调用代理方法,给代理发送信息 [self.delegate addContactViewController:self didSaveContact:contact]; } }
3、让代理类遵守代理协议
@interface ContactVC ()<AddContactVCDelegate>
4、在代理类中实现代理方法
-(void)addContactViewController:(AddVC *)addContactVc didSaveContact:(Contact *)contact{//以下内容为参考 //把模型添加到联系人数组 [self.contacts addObject:contact]; //局部刷新 NSIndexPath *lastPath = [NSIndexPath indexPathForItem:self.contacts.count-1 inSection:0]; [self.tableView insertRowsAtIndexPaths:@[lastPath] withRowAnimation:UITableViewRowAnimationFade]; //隐藏控制器 [self.navigationController popViewControllerAnimated:YES]; //同步新数据到沙盒 [NSKeyedArchiver archiveRootObject:self.contacts toFile:self.contactPath]; }
0 0
- IOS的代理模式
- iOS的动态代理模式的实现
- IOS“吐司”和 代理的设计模式
- iOS 观察者模式以及代理的例子
- IOS代理模式delegate的相关代码
- iOS 代理模式频繁调用代理方法的优化
- iOS代理模式
- ios 开发 代理模式
- iOS --代理设计模式
- iOS代理设计模式
- iOS 代理设计模式
- ios代理设计模式
- iOS代理设计模式
- iOS代理设计模式
- IOS-代理模式
- iOS代理设计模式
- iOS代理设计模式
- ios代理模式
- C++ 重载决议overload resolution 与 SFINAE
- macOS Sierra内置功能更新(续)-已知其它
- VC/MFC之ListCtrl控件使用经验总结
- MFC遍历/清空所有Edit控件内容
- 2016年截止6月17日以来指引文档(Guide)的更新列表(Apple)
- IOS的代理模式
- CART实现
- Linux---tmux常用命令
- opencv 透视变换
- 基于zookeeper的高可用Hadoop HA集群安装
- 1 如何源码编译并部署red5
- MonoBehaviour组件的生命周期
- 三台服务器之对比
- 字符串作为freemarker模板的简单实现例子