0

在此处输入图像描述

UITableView包含,假设,50行。第一行包含一个项目,每个偶数行索引单元格包含两个项目?为此我们需要XIB为每个备用行使用两个视图?

totalrowcount 和cellAtRowatindexpath逻辑的逻辑是什么?

还有其他选择吗?

4

5 回答 5

1

我想你的桌子是这样的:

+---------------------+
|        Data 1       |  --> Cell Type 1
+---------------------+
|  Data 2  |  Data 3  |  --> Cell Type 2
+---------------------+
|        Data 4       |
+---------------------+
|  Data 5  |  Data 6  |
+---------------------+
.         ...         .

首先,您应该UITableViewCell为这些细胞类型设计两种不同的笔尖。就个人而言,我会使用 Storyboard,设计两个具有不同标识符的动态单元格,并在需要时调用它们。例如:

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                              reuseIdentifier:@"Cell Type 1"];

让我们来看看 tableView 的数据源方法。我假设数据存储在一个名为self.tableData. 您可以构建一个逻辑来返回行数,如下所示:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return ceil([self.tableData count]*(2.0f/3.0f));
}

然后在您的cellForRowAtIndexPath方法中,返回这些单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;
    NSUInteger objectIndex = floor(indexPath.row*(3.0f/2.0f));

    if (indexPath.row % 2 == 0) {
        // define cell as Cell Type 1 from nib
        cell.yourLabel.text = [self.tableData objectAtIndex:objectIndex];
    } else {
        // define cell as Cell Type 2 from nib
        cell.yourLabel1.text = [self.tableData objectAtIndex:objectIndex];
        cell.yourLabel2.text = [self.tableData objectAtIndex:(objectIndex+1)];
    }

   return cell;
}

请注意,我假设您的tableData数组包含NSString对象之类的东西,并且您的单元格上有UILabel's 。上面的代码从相应索引中的数据源中获取对象并填充您的标签。

于 2013-05-29T13:42:13.790 回答
0

totalrowcount 为 50

cellForRowAtIndexpath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // make 2 cellidentifiers here and use it for different nib
    UITableViewCell  *cell; 
    if(indexpath.row==0){
    //load first nib
    }
    else
    {
    //load second nib
    }
   return cell;
}
于 2013-05-29T12:23:22.980 回答
0

首先- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 在此处使用并传递 1 部分:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

然后在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section方法中,您将总行数作为数据源传递给表格视图。例如:如果您必须显示 50 行,则将 50 行传递为:

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

    return 50;

}

并且- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 您将根据需要传递单元格:

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


        if(indexPath.row %2 ==0)
    {
            // First alternaate cell which you need to display at even index
            return ALTERNATE_NIB_1;
    }
    else 
    {
            // Second alternaate cell which you need to display at odd index
        return ALTERNATE_NIB_1;
    }


return nil;
}

希望它可以帮助你。

于 2013-05-29T12:25:14.177 回答
0
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if(indexPath.row % 2 == 0) {
            //cell type 1
        } else if(indexPath.row % 2 == 1) {
            //cell type 2
        }
    }

上面的代码将帮助您分配备用单元格模式

于 2013-05-29T12:37:33.030 回答
0

如果您有 2 种类型的单元格,我建议使用 2 种不同的标识符,当您将单元格出列时,您会得到所需的单元格。

于 2013-05-29T12:40:49.900 回答