1

我有 UITableView 我想要设计如下。

在此处输入图像描述

为此,我有如下图像。

底部行.png

在此处输入图像描述

中间行.png

在此处输入图像描述

topAndBottomRow.png

在此处输入图像描述

topRow.png

在此处输入图像描述

为此,我在里面使用了以下代码-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UIImage *selectedImage;
if (indexPath.row==0) {
    selectedImage = [UIImage imageNamed:@"topRow.png"];
} else if (indexPath.row == ([products count]-1)) {
    selectedImage = [UIImage imageNamed:@"bottomRow.png"];
} else {
    selectedImage = [UIImage imageNamed:@"middleRow.png"];
}

if ([products count]==1) {
    selectedImage = [UIImage imageNamed:@"topAndBottomRow.png"];
}

UIImageView *selectedBackgroundImageView = [[UIImageView alloc] initWithImage:selectedImage];
cell.selectedBackgroundView = selectedBackgroundImageView;

selectedBackgroundImageView = [[UIImageView alloc] initWithImage:selectedImage];
cell.backgroundView = selectedBackgroundImageView;

现在,一切都很完美。

我的设计师坚持以下几点。

在 tableview 上,我一次可以有 4 个单元格。现在假设我有 6 行。

现在当我有 6 行(并且 tableview 只能显示 4)时,第 4 行显示bottomRow.png很明显。但我的设计师坚持,即使表格视图是滚动的,你应该对所有 4 行都有相同的设计。


编辑 1

首先,很抱歉没有说清楚。

好吧,当 UITableView 加载时,即使有 6 个单元格,我也只能看到前 4 个单元格,因为我已经相应地设置了 tableview 的高度。要查看其余 2 个单元格,我必须向下滚动。我相信这就是表格视图的工作方式。

现在假设只有 4 条记录。对于 4 条记录,表格视图看起来像我拥有的​​图像。

现在,当我的 tableview 大小为 6(id 为 1-6)时,第四行获取图像 middleRow.png。我的设计师想要在这里看到bottomRow.png。

现在假设我向下滚动。现在我看到单元格 id 为 3-6 的行。现在 id 为 3 的单元格有 middleRow.png,但我的设计师想要查看 topRow.png。

我知道这很丑陋,但这是我的设计师想要看到的。

有什么建议可以完成这项工作吗?

4

4 回答 4

2

实现目标的一种方法:使用 numberOfRows 确定此单元格是否是最后一个单元格。在你的 cellForRowAtIndexPath 中:

if (indexPath.row==0) {
   selectedImage = [UIImage imageNamed:@"topRow.png"];

.....

else if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section]-1){
   selectedImage = [UIImage imageNamed:@"bottomRow.png"];
}

编辑:

抱歉,我误解了你的问题,我有另一个建议,我认为你可以尝试...

  1. customCell,使用自定义方法设置其图像。例如,

    [customCell setSelectedImage: [UIImage imageNamed:@"middleRow.png"]; 
    

2.在cellForRowAtIndexPath中,可以将所有单元格设置为:middleRow.png

3.tableView加载完成后,使用[self.tableView visibleCells]运行检查方法;

例如

 - (void) setImageForTopAndBottomCells{

         CustomCell *topCell = [[self.tableView visibleCells] objectAtIndex: 0];
         CustomCell *bottomCell = [[self.tableView visibleCells] objectAtIndex: self.tableView.visibleCells.count-1];

         [topCell setSelectedImage: [UIImage imageNamed:@"topRow.png"]; 
         [bottomCell setSelectedImage: [UIImage imageNamed:@"bottomRow.png"]; 
  }
  1. 如果您的 tableView 是可滚动的,请将您的 ViewController 设置为 UIScrollView 委托,在您的委托方法 scrollViewDidScroll 中,再次运行 setImageForTopAndBottomCells 方法。

可能有比我建议的更好的方法来实现你想要的,如果你找到了,请告诉我。

于 2013-09-05T20:19:28.970 回答
0

如何使用scrollViewDidScroll:,indexPathsForVisibleRowsreloadRowsAtIndexPaths:withRowAnimation:类似这样的组合:

  1. 每次表格视图滚动时,您都会使用该UIScrollViewDelegate方法获得可见行的列表scrollViewDidScroll:
  2. 如果它滚动到足以改变背景,调用UITableView'reloadRowsAtIndexPaths:withRowAnimation:传递所有需要新背景的索引路径
  3. 而不是使用indexPath.row == 0来查找您将使用的顶部[indexPath isEqual:[tableView indexPathsForVisibleRows][0]]以及其他行的相同内容

希望这可以帮助。

于 2013-09-06T03:06:00.087 回答
0

您可以在CellForRowAtIndexPath方法中使用 middlerow.png 作为 UITableViewCell 的背景视图。下面是代码

 cell.backgroundView = [[UIImageView alloc] initWithImage[[UIImageimageNamed:@"middlerow.png"]stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];

在此之后,您可以更改表格视图的角半径(添加边框颜色/宽度)。但是首先你必须添加QuartzCore框架。

self.table.layer.borderColor=[[UIColor colorWithRed:209.0/255 green:209.0/255 blue:209.0/255 alpha:1.0] CGColor];
self.table.layer.borderWidth =3.0;
self.table.layer.cornerRadius =10.0;

希望这可以帮助。

于 2013-09-06T08:48:09.683 回答
0

你可以使用这个:

NSArray *visible = [tableView indexPathsForVisibleRows];

NSIndexPath *indexpath = (NSIndexPath*)[visible objectAtIndex:0];

-(NSArray *)indexPathsForVisibleRows返回一个索引路径数组,每个索引路径标识接收器中的可见行。因此,一旦获得可见行,就可以根据 indexpath.row 使用所需的图像。

于 2013-09-06T09:14:09.923 回答