iOS开发

代理:跨界面点击事件

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];
}
上一篇下一篇

猜你喜欢

热点阅读