通过创建Cell子类,来实现自定义Cell

最先弄明白的一点:通过子类话的方法div,是子类话的UItableViewCell!

疑惑:

1,这个子类cell 和 之前的那个通过代码来自定义Cell有什么区别呢?

        答:之前的通过代码自定义Cell,其原理是在系统提供的UITableViewCell类的实例的ContentView中通过添加视图控件来实现自定义Cell的,

               但是值得注意的是;使用该方式时,不能再使用系统Cell实例的属性,如textLabel等,以防排版错乱,视图出现问题;归根结底还是用的系统的Cell;

               而子类话cell,我们就可以实现修改Cell类的属性和布局,更加自由,但是这种方式要理清 Cell类的方法调用顺序不然很容易出现问题!

    其实这两种方法配合起来使用才能达到自定义的灵活效果,单一的改变field属性是无聊僵硬的!

注意:

1,首先cell的initwithstyle中无法修改cell类属性,如cell的text label 的frame不能在cellforrow中修改,因为还会调用layoutsubviews方法;系统会重新进行排版和数据的显示,所以你在cellforrow中修改的那些field的属性也完全失效了

2,要在layoutsubviews方法中先写 【super layoutsubviews】 不然不会排版和数据显示


主要实现代码:

/**

 *  初始化 将要在ContentView中添加的 “视图控件” ! 并加到ContentView上 布局和数据的设置要放在系统的layoutsubviews方法中

 *  该方法要记得在 initWithStyle 或者相应的系统初始化cell的方法中调用

 */

-(void)initSubViewsInContent{

    myLabel=[[UILabel alloc] initWithFrame:CGRectZero];

     //尤为重要的一步 : 添加视图控件到 ContentView上

    [self.contentView addSubview:myLabel];

}


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

{

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {

        // Initialization code

        [self initSubViewsInContent];

    }

    return self;

}


-(void)layoutSubviews{

    [super layoutSubviews]; // 这段代码必须写!


    // 修改配置 系统Cell自带控件和自定义控件!

    myLabel.frame=CGRectMake(50, 10, 200, 60);

    myLabel.backgroundColor=[UIColor cyanColor];

    myLabel.text=self.text;

   

    // .....其它的自定义控件修改配置....

    

     

}


还有一个值得注意的一个小点: 其实我们自己定义的控件的初始化是 可以在自定义的initsubviews方法中编辑的,说的系统会再layoutsubviews方法中重新排版是针对的系统cell的属性控件的排版,我们自定义的没有问题,其实在initsubviews方法中配置好默认的会效率更高!假如配置不是统一的,那么还是在layoutsubviews中配置好了,但分开来写还是有一定的美观和逻辑性的~~~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值