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]; }