美文网首页iOS开发
代理:跨界面点击事件

代理:跨界面点击事件

作者: 一蓑丨烟雨 | 来源:发表于2017-05-10 14:51 被阅读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];
    }
    

    相关文章

      网友评论

        本文标题:代理:跨界面点击事件

        本文链接:https://www.haomeiwen.com/subject/jchgtxtx.html