UITableView 使用小结

Posted 「违规用户」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView 使用小结相关的知识,希望对你有一定的参考价值。

1.对于 NumberOfSection  NumberOfRowInSection,我们可以设置为其最多数,仅仅需要用两个方法来确定是否显示TableView.

#pragma mark UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return _shopDetailModel ? 8 : 0;

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

    if (section == 0)

        return 3;

   

    if (section == 1)

        return 3;

   

    if (section == 3)

        return 4;

   

    if (section == 4) //优惠信息

       return self.shopDetailModel.couponInfo.count + 2;

       

   


    if (section == 7)

        return 2;

   

    return 1;


2.通过每个row的高度来让cell显示与否。也就是说逻辑写在heightForCell这边,集中处理数据逻辑。

  case 1://预约

       

            if (_shopDetailModel && (_shopDetailModel.service & MWShopServiceYuDing))

           

                if(indexPath.row == 0)

                    height = 45;

                else if(indexPath.row == 1)

                    if (_shopDetailModel.ydInfo)

                        height = 105;

                   

                else if(indexPath.row == 2)

                    if (_shopDetailModel.dingdanInfo)

                        height = 68;

                   

               

           

       

            break;


3.在写cellforIndexPath时,就是对应高度是0,它还是会调用cellforindexpath方法,所以heightforcell和cellforindexpath逻辑是一样的,要注意用空cell处理else情况。

if (_shopDetailModel && (_shopDetailModel.service & MWShopServiceYuDing))

           

                if(indexPath.row == 0)

                    cell = [tableView dequeueReusableCellWithIdentifier:kImgLabelImgCellIdentifier];

                    if (!cell)

                        cell = [[AccessoryDefaultTableCell alloc]initWithReuseIdentifier:kImgLabelImgCellIdentifier];

                   

                    [self  configureYuyueCell:(AccessoryDefaultTableCell *)cell atIndexPath:indexPath];

                else if(indexPath.row == 1)

                    cell = [tableView dequeueReusableCellWithIdentifier:kYDBriefCellIdentifier];

                    if (!cell)

                        cell = [[YDBriefCell alloc]initWithReuseIdentifier:kYDBriefCellIdentifier];

                   

                    [self  configureYuyueInfoCell:(YDBriefCell *)cell atIndexPath:indexPath];

                else if(indexPath.row == 2)

                   cell = [tableView dequeueReusableCellWithIdentifier:kYDDingDancellIdentifier];

                    if (!cell)

                        cell = [[YDDingDanCell alloc]initWithReuseIdentifier:kYDDingDancellIdentifier];

                   

                    [self  configureYDDingDanCell:(YDDingDanCell *)cell atIndexPath:indexPath];

               

            else

                cell = [tableView dequeueReusableCellWithIdentifier:kEmptyIdentifier forIndexPath:indexPath];

           

4.如果按照2 ,3步骤写,cellfor代码会比较乱繁杂,也可抽出部分逻辑判断到configcell中,如下,这样cellfor中就可以不用判断此逻辑。如果有更好的建议,可以讨论一下。

//配置预约时间点行

- (void)configureYuyueInfoCell:(YDBriefCell *)cell atIndexPath:(NSIndexPath *)indexPath

    if (_shopDetailModel.ydInfo)

        cell.timeCollectionView.dataSource = self;

        cell.timeCollectionView.delegate = self;

        cell.selectionStyle = UITableViewCellSelectionStyleNone;

   


5.参考美味的shopdetailviewcontroller

以上是关于UITableView 使用小结的主要内容,如果未能解决你的问题,请参考以下文章

使用 Backbone 将文件上传到美味派?

如何在美味派中强制使用一些过滤器?

如何使用JQuery和JSON获取美味书签

在美味的视图中暴露“虚拟”字段?

美味派的分析

美味派api没有在json结果中显示ForeignKey