代理:跨界面点击事件
2017-05-10 本文已影响1人
一蓑丨烟雨
tableView的尾视图添加加载更多按钮;
通过代理为按钮添加点击事件。
#import <UIKit/UIKit.h>
@class MJTgFooterView;
/**
1.协议名称: 控件类名 + Delegate
2.代理方法普遍都是@optional
*/
@protocol MJTgFooterViewDelegate <NSObject>
@optional
- (void)tgFooterViewDidClickedLoadBtn:(MJTgFooterView *)tgFooterView;
@end
@interface MJTgFooterView : UIView
/**
* 快速创建一个footerView对象
*/
+ (instancetype)footerView;
@property (nonatomic, weak) id<MJTgFooterViewDelegate> delegate;
@end
#import "MJTgFooterView.h"
@interface MJTgFooterView()
- (IBAction)loadBtnClick;
@property (weak, nonatomic) IBOutlet UIButton *loadBtn;
@property (weak, nonatomic) IBOutlet UIView *loadingView;
@end
@implementation MJTgFooterView
+ (instancetype)footerView
{
return [[[NSBundle mainBundle] loadNibNamed:@"MJTgFooterView" owner:nil options:nil] lastObject];
}
/**
* 点击"加载"按钮
*/
- (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;
});
}
@end
在控制器视图中设置代理:
#import "MJViewController.h"
#import "MJTgFooterView.h"
@interface MJViewController () <UITableViewDataSource, MJTgFooterViewDelegate>
@end
@implementation MJViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 设置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];
}