首页 热点专区 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

ObjC中委托(delegate)用法

2024-12-18 来源:要发发教育

委托的用法,在本文中,将以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

显示全文