代理理解(一)针对于系统中使用的控件
来源:互联网 发布:淘宝创意礼品店 编辑:程序博客网 时间:2024/06/13 08:24
Delegate的用途:
用于改变或控制其他对象。
Delegate 的定义:
(1)Delegate 是一个对象,其类型为 id (anonymous type: 匿名类型);
(2) Delegate 的引用通常是一个实例变量(instance variable),命名为 delegate;
(3)Delegate 内所用的方法是 访问模式 (Accessors pattern)
Delegate Message 的命名:
发给Delegate的消息通常带有(should, will, did) 之一。
should:期待delegate返回一个值;
will:表示变化发生之前 要做的事情;
did : 表示变化发生之后 要做的事情。
Cocoa Touh 的很多类都不同程度地用到Delgete。 比如: NSTextField, NSTableView。 其中 NSTableView 还用到了 DataSource。
其实,Data Source 也是一种委托。 Data Source 减少了 View 与 Model 之间的耦合性。 其中 , NSAppplication 实现了几十个委托方法。
Delegate 使用的注意事项:
Delegate 是一个 ID 类型的对象, 同样存在创建和释放问题。 对于Data Source , 只有Data Source的使用者 (比如Table View)释放后, DataSouce 才能被释放。否则, 就会出现crash。 因为在table view 获取数据时, 数据已经不见了。
Delegate 可用在多个场景下,比如对象间的数据交互, 不同视图之间的行为交互。 若仅仅是数据交互, 可实现的方法还有很多。 Delegate 尤其适用于视图之间的行为交互。
这里通过UIActionsheet 和 UIAlertView 的使用给以说明。
UIActionsheet *actionsheet = [ [UIActionsheetalloc]
initWithTile:@”Are you sure?”
delegate: self
cancelButtonTitle: @”No Way!”
destructiveButtonTitle: @”Yes, I’m sure!”
otherButtonTitles: nil] ;
这里需特别注意 delegate:self 的使用方法。 它表明 当 actionsheet 的button 被按下时,delegate 会收到通知。更确切地说, delegate 的actionsheet:didDismisswithButtonIndex: 方法将被调用。 将self作为 delegate 参数传递给该方法,可以确保actionsheet:didDismisswithButtonIndex: 被调用。
Cancelbutton 顾名思义,是取消按钮。 与此相对应, destructiveButton是确定按钮。 通过delegate:self设置,我们可以在 actionsheet:didDismisswithButtonIndex: 方法中判断 用户选择的是 取消操作还是确定操作。
如果没必要区分 哪个按钮给按下, 直接使用UIAlertView 即可,实例如下:
UIAlertView *alert = [ [UIAlertView alloc]
initWithTitle:@ “Something was done”
message: @”Everything is OK”
delegate: nil
cancelButtonTitle:@”Cancel”
OtherButtonTitles:nil ];
每 个view都有自己的delegate,同样, UIAlertView 也有自己的delegate, 如果我们想知道用户何时关闭了 AlertView 提示框,或想判断用户按下的是哪个按钮,就可以使用 delegate:self。 其实这里的alertView 只是向用户提供了一个按钮,根本无需判断用户按下的是哪个按钮,因此声明 delegate:nil 即可。
- 代理理解(一)针对于系统中使用的控件
- 针对于java实验的思考(一)
- 针对于数据库分区的使用
- jQuery中,在<input>中使用时间控件,当输入时间后,立刻获得该值(针对于.bind("input propertychange", function(){})不起作用的解决方法)
- 代理模式的自我理解(一)
- 理解Android系统的进程间通信原理(一)----RPC中的-代理模式 -RMI-RPC
- 理解Android系统的进程间通信原理(一)----RPC中的代理模式
- 理解Android系统的进程间通信原理(一)----RPC中的代理模式
- 理解Android系统的进程间通信原理(一)----RPC中的代理模式
- Android自定义控件 于笔者-开天辟地的大事(一)
- java中针对于时间转换的DateUtils工具类
- 通信系统中对眼图的理解(一)
- wxpython 中针对 TextCtrl 控件的设置
- 针对web打印控件的使用心得
- Swift中代理使用篇(一)
- 嵌入式系统中volatile 的使用的意义(原发于2007-11-7)
- 针对物联网中MQTT协议的学习(一)
- GIT 初学使用(一) - 针对项目的respository创建
- msys 中文乱码解决方案
- Win7使用xp中的超级终端
- JavaScript window.location对象
- hadoop中与文件读取相关的类FSDataInputStream、FileSystem 及其方法
- 排序算法----直接插入排序
- 代理理解(一)针对于系统中使用的控件
- 设备驱动外传 - 虚拟总线和platform device
- NoSQL——Redis在win7下安装配置的学习一
- 编程式事务管理—PlatformTransactionManager
- TRUNC函数的用法(转)
- i2c驱动调试经验
- ecshop 处理
- xStream完美转换XML、JSON
- 软连接和硬链接