UITableView_6-团购实例,刷新数据,代理实现,GCD方法使用

来源:互联网 发布:google java style 编辑:程序博客网 时间:2024/05/19 14:38



//  TGtgfootview.h=======================

//  TG团购

//

//  Created by Toge on 6/5/15.

//  Copyright (c) 2015 wxhl. All rights reserved.

//


#import <UIKit/UIKit.h>

@class TGtgfootview;

//协议名是类名加Delegate,方便其他人使用

@protocol TGtgfootviewDelegate <NSObject>

//可选的方法类型

@optional

//方法名以类名去除前缀开始,最好可以描述清楚要做的事情,最后还要把自己作为参数使调用着知道是谁在调用,避免当方法名重名时可以区分

- (void)tgfootviewDidClicloadButton:(TGtgfootview *)tgfootview;


@end


@interface TGtgfootview : UIView

//定义代理属性

@property (nonatomic,weak)id <TGtgfootviewDelegate> delegate;


+ (instancetype)footView;


@end


//  TGtgfootview.m====================================

//  TG团购

//

//  Created by Toge on 6/5/15.

//  Copyright (c) 2015 wxhl. All rights reserved.

//


#import "TGtgfootview.h"


@interface TGtgfootview()

@property (weak, nonatomic) IBOutletUIView *loadingView;

@property (weak, nonatomic) IBOutletUIButton *loadBtb;


- (IBAction)loadButton:(UIButton *)sender;


@end


@implementation TGtgfootview


+ (instancetype)footView

{

    return [[[NSBundlemainBundle] loadNibNamed:@"TGtgfootView"owner:niloptions:nil]lastObject];

}


//点击加载按钮的实现

- (IBAction)loadButton:(UIButton *)sender {

//    隐藏加载按钮并且现实正在加载

    self.loadBtb.hidden =YES;

    self.loadingView.hidden =NO;

//    加载更多数据,由于数据在控制器类中所以加载数据最好是在控制器中实现,所以需要设置代理

//    此方法延迟执行某些代码

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

        //调用代理方法

        [self.delegatetgfootviewDidClicloadButton:self];

        //    显示加载更多按钮

        self.loadBtb.hidden =NO;

        //    隐藏玩命加载试图

        self.loadingView.hidden =YES;

    });

}

@end


//  ViewController.m=============================

//  TG团购

//

//  Created by Toge on 6/5/15.

//  Copyright (c) 2015 wxhl. All rights reserved.

//


#import "ViewController.h"

#import "TGtg.h"

#import "TGtgCell.h"

#import "TGtgfootview.h"


@interface ViewController ()<UITableViewDataSource,TGtgfootviewDelegate>

@property (weak, nonatomic) IBOutletUITableView *tableView;


@end


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //定义所有行的宽

    self.tableView.rowHeight =80;

    /**

     *在表示图的footerview上添加按钮

     */

    //第一种方式

//    UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];

//    btn.frame = CGRectMake(0, 0, 0, 44);

//    btn.backgroundColor = [UIColor orangeColor];

//    [btn setTitle:@"加载更多数据" forState:UIControlStateNormal];

    //第二种方式

//    NSString *path = [[NSBundle mainBundle] pathForResource:@"TGtgfootView.xib" ofType:nil];

//    UIView  *footView = [[NSArray arrayWithContentsOfFile:path] lastObject];

    //读取nib文件

//    UINib *nib = [UINib nibWithNibName:@"TGtgfootView" bundle:nil];

//    UIView *footView = [[nib instantiateWithOwner:nil options:nil] lastObject];

    //第二种方式的延伸,nib文件的加载封装到view中,view中提供返回view的方法如下

//    self.tableView.tableFooterView = [TGtgfootview footView];

//    第三种方式使用tag值,此种方式太垃圾

    //第四种方式,封装view,此处使用到代理,要遵守代理协议TGtgfootviewDelegate

    TGtgfootview *footView = [TGtgfootviewfootView];

    footView.delegate = self;

    self.tableView.tableFooterView = footView;

}


//TGfootviewDelegate协议的实现,加载数据

- (void)tgfootviewDidClicloadButton:(TGtgfootview *)tgfootview

{

//    此处先使用手动添加的数据

    TGtg *tg = [[TGtgalloc] init];

    tg.icon =@"ad_01";

    tg.title = @"新添加的数据";

    tg.price = @"200";

    tg.buyCount = @"3333";

    

    [self.tgsaddObject:tg];

//    重新加载表示图上的数据

    [self.tableViewreloadData];

}


0 0
原创粉丝点击