0

我想完成这样的事情:

表格视图单元格

看到只有一个数据,但是背景颜色一直持续到结束。

我知道我可以在tableView:willDisplayCell:forRowAtIndexPath:. 但随后它不会进入空单元格,因此我的空单元格始终是白色的。

4

6 回答 6

4

即使未初始化单元格,我也使用以下代码显示单元格替代颜色。我已经在 scrollViewDidScroll 上完成了这项工作,如下所示:-

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    UIView *view=[[UIView alloc] initWithFrame:tblView.frame];
    view.backgroundColor=[UIColor greenColor];

    UIView *cellView;

    int y=0;
    int i=0;

    for (UIView *view in tblView.subviews) {
        if ([NSStringFromClass([view class]) isEqualToString:@"_UITableViewSeparatorView"]) {

            cellView=[[UIView alloc] initWithFrame:CGRectMake(0, y, 320, 44)];

            if (i%2==0) {
                cellView.backgroundColor=[UIColor redColor];
            }else{
                cellView.backgroundColor=[UIColor greenColor];
            }

            [view addSubview:cellView];
            i++;
        }
    }

    tblView.backgroundView=view;
}

并在滚动表视图上得到了正确的结果。但问题是,当用户至少滚动一次 tableView 时,它会起作用。如果你能成功触发 tableView 上的事件完成它的重新加载。那么它会很好。

这是我在滚动 tableView 上得到的输出。

在此处输入图像描述

我也编写了这个方法来手动调用 didScrollMethod 但似乎不能完美地工作。

[tblView.delegate scrollViewDidScroll:(UIScrollView*)tblView.superclass];

但是像下面的代码这样调用方法绝对可以正常工作。

- (void)viewDidLoad
{
    tblView=[[MyFirstView alloc] init];
    tblView.delegate=self;
    [tblView setFrame:self.view.frame];

    [self.view addSubview:tblView];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)viewDidAppear:(BOOL)animated{
    [tblView.delegate scrollViewDidScroll:(UIScrollView*)tblView.superclass];
}

意味着在 viewDidLoad 中加载 tableView 后,在 viewDidAppear 中调用 didScroll 工作正常。

如果滚动时第一行波动,则插入下面的代码。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *view=[[UIView alloc] init];
    return view;
}
于 2013-07-31T05:54:51.563 回答
2

您必须将 设置backgroundColorcontentViewa UITableViewCell

示例如下:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];

    if (cell==nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];
        cell.contentView.backgroundColor= [UIColor greenColor];
    }

    return cell;
}

要在 tableView 的单元格中使用替代颜色,您可以执行以下操作;

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];

    if (cell==nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];

    }

    if(indexPath.row % 2)
    {
      cell.contentView.backgroundColor= [UIColor greenColor];
    }
    else
    {
      cell.contentView.backgroundColor= [UIColor yellowColor];
    }

    return cell;
}
于 2013-07-31T04:59:21.910 回答
0

具有普通样式的表格不会在最后一行下方显示行,因此无法使用表格视图单元格产生所需的效果。关于您唯一的选择是创建具有交替模式的视图并使该视图成为表格视图的页脚视图。

当表中的实际行数变为奇数和偶数时,该视图需要处理更新。而且你需要让它足够高,这样如果用户向上滚动表格,页脚仍然会到达屏幕底部。

于 2013-07-31T04:30:04.300 回答
0

除了使用“每月会议”的单元格之外,您还可以设置一些占位符单元格,例如:

  1. tableView:numberOfRowsInSection:
  2. tableView:cellForRowAtIndexPath:- 检查单元格的索引路径中,如果它的行 = 0,那么这是您的操作单元格,否则,更新单元格背景,在tableView:willDisplayCell:forRowAtIndexPath:. 确保删除占位符单元格的 selectionStyle。

或者,您可以使用 2 个单元格 - 第一个单元格 - 再次是您的“每月会议”单元格,第二个单元格 - 一个单元格的高度足以覆盖从第一个单元格到底部的屏幕,并带有条纹单元格的图像。

于 2013-07-31T04:44:51.063 回答
0

这很简单。数据源数组中的项目数量与您希望查看的行数一样多,并且除第一个之外的所有项目都是空字符串。在 willDisplayCell:forRowAtIndexPath: 中,对所有奇数单元格应用背景颜色。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"Monthly Meeting",@"",@"",@"",@"",@"",@"",@"",@"",@""];
    [self.tableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row % 2 == 1) {
        cell.backgroundColor = [UIColor colorWithRed:232/255.0 green:238/255.0 blue:222/255.0 alpha:1];
    }
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = self.theData[indexPath.row];
    return cell;
}
于 2013-07-31T05:00:56.130 回答
0

借助简单的数学将 backgroundColor 设置为 UITableViewCell 的 contentView,示例:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];

if (cell==nil)
 {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]autorelease];
    if (i%2==0) {
    cell.contentView.backgroundColor= [UIColor greenColor];
    }else{
    cell.contentView.backgroundColor= [UIColor redColor];
    }
}
return cell;
}
于 2013-07-31T06:26:35.573 回答