美文网首页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];
}

相关文章

  • 代理:跨界面点击事件

    tableView的尾视图添加加载更多按钮;通过代理为按钮添加点击事件。 在控制器视图中设置代理: 实现代理方法:

  • Android 基本功-事件分发机制

    背景知识 一般我们所说的事件分发是指点击事件的分发处理。其次,点击事件一般都是通过应用界面点击产生的,而界面又是 ...

  • iOS协议实例

    案例:给tableView的分组视图的点击事件做协议代理 1、先声明协议和方法 2、设置协议代理 3、视图点击事件...

  • Hook技术实现页面点击事件的拦截

    onClick事件代理: 点击事件的Hook类,通过反射来给view设置点击时事件: 调用绑定处:

  • didSelectRowAtIndexPath 代理方法不走

    今天修改一个tableview,之前不需要处理点击事件,现在需要加载一个点击事件,但是发现代理方法不走。 检查代理...

  • 多线程概述

    主线程的作用: 显示\刷新UI界面处理UI界面(比如点击事件、滚动事件、拖曳事件等) 优缺点: 优点:能适当提高程...

  • 手写通用的事件监听函数

    前言 在问题前,需要先理解事件冒泡、事件代理 可参考文章【事件代理】 动态数据列表里,如何监听每条数据的点击? 具...

  • Ngui 点透问题

    问题详情: 点击地面玩家行走,可是点击界面按钮的时候,事件触发不了,或者同时执行了玩家点地行走事件;当点击...

  • 点击EditText以外区域隐藏软键盘

    方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进...

  • 网易微专业-DOM编程艺术 05 事件

    1、DOM事件⑴主要内容▪事件流▪事件注册▪事件对象▪事件分类▪事件代理 ⑵什么是DOM事件▪点击一个DOM元素▪...

网友评论

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

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