IOS 自定义代理delegate方法

 

创建一个自定义代理 

@class MJTgFooterView;

/**
 1.协议名称:  控件类名 + Delegate
 2.代理方法普遍都是@optional
 3.
 */

@protocol MJTgFooterViewDelegate <NSObject>
@optional
//可实现的代理方法
- (void)tgFooterViewDidClickedLoadBtn:(MJTgFooterView *)tgFooterView; @end

声明代理,外界可以进行调用(控件器)

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

通知代理

/**
 *  点击"加载"按钮
 */
- (IBAction)loadBtnClick {
    // 1.隐藏加载按钮
    self.loadBtn.hidden = YES;
    
    // 2.显示"正在加载"
    self.loadingView.hidden = NO;
    
    // 3.显示更多的数据
    // GCD
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 3.0s后执行block里面的代码
        // 通知代理
        if ([self.delegate respondsToSelector:@selector(tgFooterViewDidClickedLoadBtn:)]) {
            [self.delegate tgFooterViewDidClickedLoadBtn:self];
        }
        
        // 4.显示加载按钮
        self.loadBtn.hidden = NO;
        
        // 5.隐藏"正在加载"
        self.loadingView.hidden = YES;
    });
}

 

使用代理(实现方法)controller

@interface MJViewController () <UITableViewDataSource, MJTgFooterViewDelegate>
    // 设置footerView
    MJTgFooterView *footer = [MJTgFooterView footerView];
    footer.delegate = self;
    self.tableView.tableFooterView = footer;

 

#pragma mark - MJTgFooterViewDelegate方法
/**
 *  加载更多的数据
 */
- (void)tgFooterViewDidClickedLoadBtn:(MJTgFooterView *)tgFooterView
{
#warning 正常开发:发送网络请求给远程的服务器
    // 1.添加更多的模型数据
    MJTg *tg = [[MJTg alloc] init];
    tg.icon = @"ad_01";
    tg.title = @"新增加的团购数据..";
    tg.price = @"100";
    tg.buyCount = @"0";
    [self.tgs addObject:tg];
    
    // 2.刷新表格(告诉tableView重新加载模型数据, 调用tableView的reloadData)
    [self.tableView reloadData];
}

 

posted on 2017-02-24 15:43  守望星空  阅读(287)  评论(0编辑  收藏  举报

导航