UITableViewCell自定义--代码自定义 和 xib自定义

来源:互联网 发布:js 引用类型 堆 栈 编辑:程序博客网 时间:2024/06/05 01:12

自定义cell:可以手动也可以使用xib布局。


当我们的每一行cell的内容不一样,会有变化时,例如微信的朋友圈,可以配图,也可以不配图,所以这个配图的UIImageView的frame就不一样。(因为hidden属性是会占空间的),这时我们使用代码自定义cell。

       当每一行cell的格式固定,不存在变化时,使用xib自定义cell就更加便捷了。


- (void)awakeFromNib

{

    // Initialization code

        //这个方法是在 xib上的控件加载完成后,调用的一个方法,在这个方法中,我们可以重新设置控件的属性,或者添加控件到cell的contentView上。利用这个方法,可以实现xib和代码两种相结合的方式自定义cell

}



         使用XIB自定义Cell时,创建cell:

        

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

   

    staticNSString * idn=@"AZFirstTableViewCell";//必须与xib中的标示符一致

   static BOOL isRegistr=NO;

    

   if (!isRegistr) {

        //UITableView中注册自定义UITableViewCellxib

        UINib *nib=[UINibnibWithNibName:@"AZFirstTableViewCell"bundle:nil];

        [tableView registerNib:nibforCellReuseIdentifier:idn];

        isRegistr=YES;

    }

    //自定义cell的复用

    AZFirstTableViewCell *cell=[tableViewdequeueReusableCellWithIdentifier:idn];

   

   AZAppModel *app=self.cellArray[indexPath.row];

    cell.iconImageView.image=[UIImageimageNamed:app.icon];

    cell.nameLabel.text=[NSStringstringWithFormat:@"%d%@",indexPath.row,app.name];

    cell.testLabel.text=@"ok";



         代码自定义cell:

思路:

01  重写 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier这个方法,然后在其中创建UI控件(先不指定frame),指明每个控件的tag值,添加到tablecell的contentView上。

02 定义一个setCellFrame的接口,利用tag值查找到每个UI控件,然后根据传入的model(比如是否有配图),来确定每个控件的frame。

#import "AZMyTableViewCell.h"


#define ICONTAG 10

#define NAMETAG 11

#define CONTENTTAG 12

#define PICTURETAG 13


@implementation AZMyTableViewCell


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

   self = [superinitWithStyle:style reuseIdentifier:reuseIdentifier];

   if (self) {

        // Initialization code

        

        UIImageView *icon=[[UIImageViewalloc] init];

        icon.tag=ICONTAG;

        [self.contentViewaddSubview:icon];

        

       UILabel *nameLabel=[[UILabelalloc] init];

        nameLabel.tag=NAMETAG;

        nameLabel.font=[UIFontsystemFontOfSize:15];

        [self.contentViewaddSubview:nameLabel];

        

       UILabel *contentLabel=[[UILabelalloc] init];

        contentLabel.tag=CONTENTTAG;

        contentLabel.numberOfLines=2;

        contentLabel.font=[UIFontsystemFontOfSize:12];

        [self.contentViewaddSubview:contentLabel];

        

        

        UIImageView *picture=[[UIImageViewalloc] init];

        picture.tag=PICTURETAG;

        [self.contentViewaddSubview:picture];

        

    }

    returnself;

}


-(void)cellFrame:(AZWeiBo *)weiBo

{

    UIImageView *icon=(UIImageView *)[self.contentViewviewWithTag:ICONTAG];

    icon.frame=CGRectMake(2,2, 40, 40);

    UILabel *nameLael=(UILabel *)[self.contentViewviewWithTag:NAMETAG];

    nameLael.frame=CGRectMake(45,2, 150, 20);

    UILabel *contentLabel=(UILabel *)[self.contentViewviewWithTag:CONTENTTAG];

    contentLabel.frame=CGRectMake(45,25, 200, 40);

    

    UIImageView *picture=(UIImageView *)[self.contentViewviewWithTag:PICTURETAG];

   if (weiBo.picture==nil) {

        

        picture.hidden=YES;

       self.cellHight=60;

    }

   else{

        picture.hidden=NO;

        picture.frame=CGRectMake(45,70, 60, 60);

       self.cellHight=132;

    }

    

}

-(void)setWeiBo:(AZWeiBo *)weiBo

{

    UIImageView *icon=(UIImageView *)[self.contentViewviewWithTag:ICONTAG];

    icon.image=[UIImageimageNamed:[NSStringstringWithFormat:@"%@",weiBo.icon]];

    UILabel *nameLael=(UILabel *)[self.contentViewviewWithTag:NAMETAG];

    nameLael.text=weiBo.name;

    UILabel *contentLabel=(UILabel *)[self.contentViewviewWithTag:CONTENTTAG];

    contentLabel.text=weiBo.content;

    

    UIImageView *picture=(UIImageView *)[self.contentViewviewWithTag:PICTURETAG];

   if (weiBo.picture!=nil)

    {

        picture.hidden=NO;

    picture.image=[UIImageimageNamed:[NSStringstringWithFormat:@"%@",weiBo.picture]];

    }


}


- (void)awakeFromNib

{

    // Initialization code

}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

    [supersetSelected:selected animated:animated];


    // Configure the view for the selected state

}


@end







0 0
原创粉丝点击