0

这更像是一个数学问题。我拥有的是一个动态数组对象,我在其中存储用户照片。

arryData = [[NSArray alloc] initWithObjects:@"pic1.png", @"pic2.png", @"pic3.png", @"pic4.png", @"pic5.png", @"pic6.png",@"pic7.png", @"pic8.png",nil];

该数组可以包含任意数量的对象,例如 8 或 20 或 100 个。在我的表格视图中,我通过将它们添加到 cell.contentview 中为每行创建了 4 个 UIImageView。所以如果让我们说

  • 如果 arryData 有 3 个对象,那么我希望 UITable 创建 1 行
  • 如果 arryData 有 4 个对象,那么我希望 UITable 创建 1 行
  • 如果 arryData 有 5 个对象,那么我希望 UITable 创建 2 行
  • 如果 arryData 有 8 个对象,那么我希望 UITable 创建 2 行
  • 如果 arryData 有 10 个对象,那么我希望 UITable 创建 3 行
  • .... 等等

那么我该如何为我的 arryData 中的 N 个对象执行此操作?

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

        //NSLog(@"Inside numberOfRowsInSection");
        //return [arryData count];

//Cannot think of a logic to use here? I thought about dividing [arryData count]/4 but that will give me fractions

    }

图片值一千字。

在此处输入图像描述

4

4 回答 4

5

所以基本上你需要除以四,四舍五入。由于 Objective-C 中的整数除法会截断(向零舍入),您可以通过执行以下操作进行舍入:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return (arryData.count + 3) / 4;
}

通常,要进行整数除法(正整数)四舍五入,在除法之前将分母-1 添加到分子。

如果您为每行的图像数量定义了一个常数,请使用它。例如:

static const int kImagesPerRow = 4;

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return (arryData.count + kImagesPerRow - 1) / kImagesPerRow;
}
于 2013-06-20T20:14:20.480 回答
1

对于行数,除以图像数并向上取整:

rowCount = ceilf([arryData count] / 4.0);
于 2013-06-20T20:13:58.527 回答
0

我想你只有一个部分,所以:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   NSInteger photoNumber = [yourDataSource count];
   if(photoNumber % numberOfPhotosOnRow == 0) {
        return photoNumber/numberOfPhotosOnRow;
   }
   else {
        return photoNumber/numberOfPhotosOnRow + 1; 
   }
}
于 2013-06-20T20:13:53.780 回答
0

我不得不为我不久前写的一个应用程序创建类似的东西(似乎你想在每个单元格中包含 4 个图像)`

 if (tableView == yourTableView)
    {
        int rows = [yourArray count];

        int rowsToReturn = rows / 4;
        int remainder = rows % 4;
        if (rows == 0) {
            return 0;
        }
        if (rowsToReturn >0)
        {
            if (remainder >0)
            {
                return rowsToReturn + 1;
            }
            return rowsToReturn ;

        }
        else
            return 1;

    }`
于 2013-06-20T20:14:08.230 回答