iOS 你不知道的新鲜事iOS 开发成长中心iOS Developer

iOS开发--代理的使用

2016-11-16  本文已影响8973人  爱吃鱼的小灰
iOS中在cocoa框架中的Delegate模式与自定义的委托模式。
代理模式的使用场合:
 #import <UIKit/UIKit.h>
 #import "LeftBarModel.h"
 @protocol LeftBodyCellDelegate <NSObject>
 // 由于这里没有任何修饰词所以是默认的代理方法,切记默认的代理方法,如果遵守了协议那就必须实现 
/**
  *  @Description item选中跳转对应的控制器 
  *  @param 被点击的按钮
  */
 - (void)selectedItemButton:(NSInteger)index;
// 只是为了演示这儿是想说明下边这个方法是可选的就是可以实现也可以不实现
 @optional
 - (void)optionalFouction;
 @end
 @interface LeftBodyTableViewCell : UITableViewCell
// 在这里定义一个属性,注意这里的修饰词要用weak
 @property(nonatomic,weak)id<LeftBodyCellDelegate>   leftBodyCellDelegate;
 @end
// 这里解释下:我的这个委托者是定制的cell这里包含了一个按钮,按钮的点击事件在cell里我打算用代理传递出去给控制器,所以这是个按钮的点击响应事件
 - (void)itemButonClick:(UIButton *)button
{
// 这里的self.leftBodyCellDelegate是判断一下控制器有没有遵守协议设置代理
// [self.leftBodyCellDelegate respondsToSelector:@selector(selectedItemButton:)]这个是判断有没有实现这个代理方法
// 当两个条件都满足了就可以调用代理方法了
    if (self.leftBodyCellDelegate && [self.leftBodyCellDelegate respondsToSelector:@selector(selectedItemButton:)])
    {
// 调用代理方法
        [self.leftBodyCellDelegate selectedItemButton:button.tag - 1000];
    }
}
  // 首先是要遵守这个协议
@interface RootViewController ()<UITableViewDelegate,UITableViewDataSource,LeftBodyCellDelegate>
  // 然后是要设置代理,在创建cell时候要设置代理人为控制器
    cell.leftBodyCellDelegate = self;
  #pragma mark --------------- LeftBodyCellDelegate
  - (void)selectedItemButton:(NSInteger)index
  {
// 这里是你点击了cell里的某个按钮后要做的操作
}
上一篇 下一篇

猜你喜欢

热点阅读