【问题标题】:Load cell selectively in TableView在 TableView 中选择性地称重传感器
【发布时间】:2011-12-01 01:50:24
【问题描述】:

我需要在tableView中返回单元格:cellForRowAtIndexPath:仅当某些条件为真时,例如:

if (condition == true)
return nil;
else
return cell;

返回 nil 给我一个错误。

【问题讨论】:

    标签: iphone ios uitableview cell


    【解决方案1】:

    您需要做更多工作才能有条件地在 UITableView 中拥有一个单元格。

    假设您有 3 个单元格,第一个是有条件的。您需要做的第一件事是根据此条件使您的表格有 2 或 3 个单元格:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        if(condition) {
            return 3;
        } else {
            return 2;
        }
    }
    

    接下来您可以返回实际的单元格。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        if(condition) {
            if(indexPath.row == 0) {
                //create and return conditional cell
            } else {
                //create and return normal cell
            }
        } else {
            //create and return normal cell
        }
    }
    

    瞧!

    PS:(这是假设所有内容都在一个部分中完成。如果您需要将其分成多个部分,我们也可以进入)。

    【讨论】:

      【解决方案2】:

      这是因为您的UITableView 中不能有空格,这是不允许的,您至少必须返回一个空单元格。你想做什么?

      TableView 尝试检索下一个单元格并获得 nil 时出现错误,无论如何它都必须获取下一个单元格。

      【讨论】:

        【解决方案3】:

        根据您打算在这里做什么,您是否可以在调用 tableview:cellForRowAtIndexPath 之前不执行条件测试:

        EG

        if( someCondition )
        {
            [self.tableview cellForRowAtIndexPath:indexPath]
        }
        

        或者,如果您的结果是仅显示满足特定条件的表格单元格,我建议您创建一个函数,将这些元素从您的 tableview 数据复制到一个 NSArray 中,您将使用它来显示所需/条件表数据。

        IE

        -(void)composeVisibleTableData
        {
            [m_visibleTableData removeAllObjects];
            for( NSObject* dataObject in m_tableDataArray )
            {
               if( someCondition )//dataObject meetsCondition
               {
                   m_visibleTableData addObject:dataObject];
               }
            }
        
        }
        

        然后在 numberOfRowsInSection: 和 tableview:cellForRowAtIndexPath: 的 UITableDelegate 函数中引用 m_visibleTableData 作为 UITableView 数据源。

        【讨论】:

          【解决方案4】:

          您应该在设置 Cell 的数据源时检查条件:)

          并根据条件过滤您的数据。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多