自定义UITableViewCell (通过XIB:每个CELL形状一样适合用XIB来创建CELL)

1,自定义CELL创建

A) 新建XIB文件,继承自UITableViewCell ,CELL设置 identify标识,用于性能优化中,将移出手机屏幕的CELL放入缓存池中的标识,这里的值必须与取出缓存池中的值一致

B)新建管理XIB的CLASS文件,此文件也要继承自UITableViewCell,

C) 对XIB和CLASS进行连线,以便可以通过CLASS对XIB中控件属性进行访问


2,思路

A) 主控制器实现Datasource的相关方法,创建CELL不再直接通过UITableViewCell创建,而是通过XIB来实现的,(XIB被哪个CLASS管理,那么主控制器加载XIB返回值就是那个CLASS类型)

B) 谁创建产生CELL??  谁更清楚创建CELL,就在该CLASS中定义创建CELL的方法

C)主控制器viewDidLoad方法中加载其他,主TableView有TableHeaderView和TableFooterView属性来产生头部和尾部的View,这里头尾VIEW也可以自定义XIB来实现

D)管理XIB的CLASS继承自什么类型,那么在加载该XIB后返回类型就是该CLASS的类型


3,代码(还没实现tableHeaderView的滚动图片效果)




#import <UIKit/UIKit.h>


@class TXTg;


@interface TXTgCell : UITableViewCell


@property (nonatomic, strong) TXTg *tg;


+ (instancetype)cellWidthTableView:(UITableView *)myTableView;


@end

=========

#import "TXTgCell.h"
#import "TXTg.h"


@interface TXTgCell()


@property (weak, nonatomic) IBOutlet UIImageView *myImageView;
@property (weak, nonatomic) IBOutlet UILabel *myTitleLabel;
@property (weak, nonatomic) IBOutlet UILabel *myPriceLabel;
@property (weak, nonatomic) IBOutlet UILabel *myBuyCountLabel;




@end


@implementation TXTgCell


+ (instancetype)cellWidthTableView:(UITableView *)myTableView
{
    static NSString *ID = @"tg";
    
    TXTgCell *cell = [myTableView dequeueReusableCellWithIdentifier:ID];
    if(cell == nil)
    {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"TXTgCell" owner:nil options:nil] lastObject];
    }
    
    return cell;
}


- (void)setTg:(TXTg *)tg
{
    _tg = tg;
    
    self.myImageView.image = [UIImage imageNamed:tg.icon];
    
    self.myTitleLabel.text = tg.title;
    
    self.myPriceLabel.text = [NSString stringWithFormat:@"$%@.00", tg.price];
    
    self.myBuyCountLabel.text = [NSString stringWithFormat:@"%@ bought.",tg.buyCount];
}


@end

===========

#import <UIKit/UIKit.h>
@class TXTgFooterView;


@protocol TXTgFooterViewDelegage <NSObject>


@optional
- (void)tgFooterViewDidLoadButton:(TXTgFooterView *)footerView;


@end


@interface TXTgFooterView : UITableViewCell


@property (nonatomic, strong) id<TXTgFooterViewDelegage> delegate;


+ (TXTgFooterView *)footerView;
@end

=============

@interface TXTgFooterView()
- (IBAction)loadBtnClick;
@property (weak, nonatomic) IBOutlet UIButton *loadBtn;


@property (weak, nonatomic) IBOutlet UIView *loadView;


@end


@implementation TXTgFooterView


+ (TXTgFooterView *)footerView
{
    return [[[NSBundle mainBundle] loadNibNamed:@"TXTgFooterView" owner:nil options:nil] lastObject];
}






- (IBAction)loadBtnClick
{
    self.loadBtn.hidden = YES;
    
    self.loadView.hidden = NO;
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 *NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        if([self.delegate respondsToSelector:@selector(tgFooterViewDidLoadButton:)])
        {
            [self.delegate tgFooterViewDidLoadButton:self];
            
            self.loadBtn.hidden = NO;
            
            self.loadView.hidden = YES;
        }
    });
}
@end

=========

#import "TXViewController.h"
#import "TXTg.h"
#import "TXTgCell.h"
#import "TXTgFooterView.h"
#import "TXTgHeaderView.h"


@interface TXViewController () <UITableViewDataSource, TXTgFooterViewDelegage>
@property (weak, nonatomic) IBOutlet UITableView *iTableView;


@property (nonatomic, strong) NSMutableArray *tgs;


@end


@implementation TXViewController


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    
    self.iTableView.rowHeight = 80;
    
    TXTgFooterView *footer = [TXTgFooterView footerView];
    
    footer.delegate = self;
    
    self.iTableView.tableFooterView = footer;
    
    self.iTableView.tableHeaderView = [TXTgHeaderView headerView];
}


- (void)tgFooterViewDidLoadButton:(TXTgFooterView *)footerView
{
    TXTg *tg = [[TXTg alloc] init];
    tg.title = @"hhh";
    tg.price = @"101";
    tg.buyCount = @"8";
    tg.icon = @"9b437cdfb3e3b542b5917ce2e9a74890";
    
    [self.tgs addObject:tg];
    
    [self.iTableView reloadData];
    
}


- (BOOL)prefersStatusBarHidden
{
    return YES;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.tgs.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    TXTgCell *cell = [TXTgCell cellWidthTableView:tableView];
    
    cell.tg = self.tgs[indexPath.row];
    
    return cell;
}


- (NSMutableArray *)tgs
{
    if(_tgs == nil)
    {
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tgs.plist" ofType:nil]];
        
        NSMutableArray *tgsArray = [NSMutableArray array];
        
        for (NSDictionary *dict in dictArray) {
            TXTg *tg = [TXTg tgWithDict:dict];
            [tgsArray addObject:tg];
        }
        _tgs = tgsArray;
    }
    return _tgs;
}


@end


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值