美文网首页一入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)用法

    委托的用法,在本文中,将以UITableView列表内,自定义cell的button点击事件委托(delegate...

  • Delegate - 高级用法之多播委托

    iOS多播Delegate类——GCDMulticastDelegate用法小结 iOS 多播委托(GCDMult...

  • C#委托Delegate和事件Event实战应用

    一、委托的概念 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate)是...

  • C# 委托

    C#委托 C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的...

  • C# 委托(Delegate)

    C# 中的委托(Delegate)类似于 C 或 C++ 中的函数指针。委托(Delegate) 是存有对某个方法...

  • 19-委托

    C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。 委托(Delegate) 是存有对某个方...

  • 52个有效方法(23) - 通过委托与数据协议进行对象间的通信

    委托模式(Delegate pattern) 委托模式(Delegate pattern):用来实现对象间的通信 ...

  • iOS开发--代理的使用

    iOS中在cocoa框架中的Delegate模式与自定义的委托模式。 在cocoa框架中的Delegate模式中,...

  • C# 高级语言总结

    后续 1 C# 委托 委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 ...

  • delegate

    什么是 delegate delegate是委托模式.委托模式是将一件属于委托者做的事情,交给另外一个被委托者来处...

网友评论

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

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