美文网首页一入iOS海iOS Developer
ObjC中委托(delegate)用法

ObjC中委托(delegate)用法

作者: 韧卓 | 来源:发表于2017-02-23 10:48 被阅读12次

    委托的用法,在本文中,将以UITableView列表内,自定义cell的button点击事件委托(delegate)UITableViewController执行任务,如刷新界面、处理数据等为例,进行演示。

    1.创建一个 delegate

    新建RZDoSomethingDelegate.h文件中:
    objc

    import <Foundation/Foundation.h>

    @protocol RZDoSomethingDelegate <NSObject>

    @option

    • (void)doSomething:(id)param;

    @end
    objc

    2.委托者声明一个delegate

    委托者自定义cell头文件(RZCustomCell.h)中,使用弱引用声明delegate属性
    objc

    import "RZDoSomethingDelegate.h"

    @interface RZCustomCell : UITableViewCell

    pragma mark - 委托

    @property (nonatomic, weak) id<RZDoSomethingDelegate> delegate;

    @end
    objc

    3.委托者调用delegate内的方法(method)

    RZCustomCell.m中,按钮被点击时,使用委托执行任务,传递上下文参数
    objc
    @implementation RZCustomCell

    • (void)initSubview
      {
      //button初始化
      UIButton *button = [[UIButton alloc] init];
      [button addTarget:self action:@selector(onClick) forControlEvents:UIControlEventTouchUpInside];
      }

    • (void)onClick
      {
      [self.delegate doSomething:self.detail];
      }

    @end
    objc

    4.被委托者设置delegate,以便委托者调用

    在RZUITableViewController.m文件中,设置被委托者
    objc
    @interface RZUITableViewController () <ZCGiftExchangeDelegate>
    @end

    @implementation RZUITableViewController

    • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

      RZCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier" forIndexPath:indexPath];
      //设置被委托者为viewController自己
      cell.delegate = self;

      if (!cell) {
      cell = [[RZCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@“identifier”];

      }

      return cell;
      }

    @end
    objc

    5.被委托者实现Delegate 所定义的方法

    在RZUITableViewController.m文件中,实现被委托方法
    objc
    @interface RZUITableViewController () <ZCGiftExchangeDelegate>
    @end

    @implementation RZUITableViewController

    • (void)doSomething:(id)param
      {
      //接受委托者的参数,进行数据处理、页面刷新等操作
      }

    @end
    objc

    相关文章

      网友评论

        本文标题:ObjC中委托(delegate)用法

        本文链接:https://www.haomeiwen.com/subject/epnvwttx.html