美文网首页IOS开发
创建UITableViewCell的三种方法

创建UITableViewCell的三种方法

作者: 朗语花香 | 来源:发表于2016-04-15 00:03 被阅读520次

    UItableView和UIcollectionView是日常生活中应用最多的,可以实现很多功能,创建的方式也有几种,下面简单总结下,创建UItableViewCell的几种情况:

    1.通过加载storyBoard的UItableViewCell

    在sotrybord中拖入的tableView中,选中Content,里面就有静态cell和动态cell了。其中两者的区别是,静态cell固定不动,直接通过控制面板添加属性就可以创建了,而动态cell也就是当我们拖入tableView,需要实现数据源方法才有数据显示的就是动态cell。

    动态cell代码如下:

    ```

    - (NSInteger) numberOfSectionsInTableView:(UITableView *)和- (NSInteger)

    numberOfSections方法默认是1组,这个代理方法可以不写,如果不写那么,系统默认是一组

    -tableView(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

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

    ```

    这两个方法是必须实现的,如果不实现,那么系统会崩溃。其中系统的UITableViewCell有三个自带的属性分别是:imageView 、textLabel、detailTextLabel 。分别给三个属性赋值,实现了最基本的数据源方法,那么基本就有数据显示了。

    2.通过代码创建UItableViewCell

    代码创建UItableViewCell,其中代码需要明白为什么需要自定义代码创建cell?

    代码创建cell,主要是因为系统的cell不能满足开发的需要。这里普及下cell的重用机制。每一个UITableView里都维护着一个cell队列,当UITableView刚加载的时候,cell队列里是没有任何数据的。dequeueResableCellWithIdentifier从字面上理解就是”出列可重用的cell",也就是根据一个标识identifier从cell队列里取出一个UITableViewCell,也就是从缓冲池加载cell,当然了,如果cell队列里没有此标识的cell,调用此方法的结果就是返回nil。因此,在UITableView刚加载的时候,cell队列里没有可用的cell,所以必须通过语句

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    来创建对应CellIdentifier标识的UITableViewCell实例。

    [ tableView:cellForRowAtIndexPath:方法主要是根据nsindex取得一个cell ]

    而当UITableView在滚动的时候导致UITableViewCell滚出手机屏幕视图的时候,程序会将这一个UITalbeViewCell实例放入此UITableView所维护的cell队列中(缓冲池中)。当UITableview中有新的UITableViewCell需要展现在手机屏幕视图上时,就会调用tableView:cellForRowAtIndexPath:方法了。因此我们可以知道以下几点:

    1-重取出来的cell是有可能已经捆绑过数据或者加过子视图的,所以,如果有必要,要清除数据(比如textlabel的text)和remove掉add过的子视图(使用tag)。

    2-这样设计的目的是为了避免频繁的 alloc和delloc cell对象而已,没有多复杂。

    3-设计的关键是实现cell和数据的完全分离

    重点代码:

    在自定义的cell的.m文件返回自定义的cell

    + (instancetype) heroCell:(UITableView *)tableView

    {

    static NSString *ID=@"hero";

    //1.查找可重用cell

    CZHeroCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];

    //2.判断是否成功获取了可重用cell,如果没有,则创建

    if (cell==nil) {

    cell=[[CZHeroCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

    }

    //3.返回

    return cell;

    }

    那么在控制器的数据源方法中,就可以直接调用封装好的创建cell的方法,直接创建cell。

    3.用xib创建cell

    其中用xib创建cell的时候,需要注意的是在自定义cell的类中,需要告诉cell是通过xib 创建的

    + (instancetype)tgCell  //封装cell

    {

    //创建cell--告诉从xib文件创建cell

    NSBundle *bundle=[NSBundle mainBundle];

    CZTgCell *cell=[[bundle loadNibNamed:@"CZTgCell" owner:nil options:nil] lastObject];

    return cell;

    }

                                                                                                           2016.3.12

    相关文章

      网友评论

      本文标题:创建UITableViewCell的三种方法

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