【问题标题】:UITableView sections issue with different cell colorsUITableView 部分出现不同单元格颜色的问题
【发布时间】:2013-01-16 19:14:24
【问题描述】:

我是 iPhone 开发的新手。我有一个包含多个部分的表格视图。我正在像这样更改单元格的颜色,效果很好。

if ([indexpath row]%2)
{
    trackCell.contentView.backgroundColor = [UIColor clearColor];
}
else
{
    trackCell.contentView.backgroundColor = [UIColor colorWithRed:212/255.0 green:212/255.0 blue:212/255.0 alpha:0.1];
}

但是现在一个部分的最后一个单元格与下一个部分的第一个单元格具有相同的颜色。我该如何解决这个问题?

【问题讨论】:

  • 你能把你所有的 UITableView 委托方法粘贴到这里吗?
  • section中的行数再次从0开始请粘贴代码

标签: iphone ios xcode uitableview


【解决方案1】:

问题在于,如果单元格位于第 1 节(或 2、3、...) 并且上一节有奇数个单元格,它以与上一个单元格的最后一个单元格相同的颜色结束。

所以,您需要检查上一节的单元格数,如果该数字是奇数,则反转您的“if”语句,如果是偶数则保持原样

编辑:

int toBeAdded = 0;
if (indexPath.section>0) {
    toBeAdded = ([self tableView:tableView numberOfRowsInSection:(indexPath.section -1)]) %2 ;
}

if (([indexpath row]+toBeAdded)%2) {
    trackCell.contentView.backgroundColor = [UIColor clearColor];
} else {
    trackCell.contentView.backgroundColor = [UIColor colorWithRed:212/255.0 green:212/255.0 blue:212/255.0 alpha:0.1];
}

编辑 2:

看到“Will Jenkins”...他是对的...您需要查看前面的所有部分,而不仅仅是上一个...

他计算一个部分中所有单元格的方法不如我的好和快,但他的答案是正确的,+1 对他......无论如何,最好的方法可能是将他的循环和我的电话结合起来to tableView:tableView numberOfRowsInSection:

【讨论】:

  • 印象深刻...我们在同一条路上,我只是迟到了一分钟。为你 +1。
【解决方案2】:

这很脏,但是您可以计算当前单元格之前的所有单元格,然后使用该计数来计算所需的颜色。这是未经测试的,但应该这样做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int cellCount = 0;
    for (int i=0;i<indexPath.section-1;i++)
    {
        cellCount+=[self numberOfRowsInSection:i]
    }

   cellCount+=indexPath.row;

   if(cellCount%2==0)
   {
    //set one color
   }
   else
   {
    //set other color 
   }
   // blah
}

【讨论】:

    【解决方案3】:

    这是由于您在每个部分中的行数...

    假设您尝试为 奇数行 提供 RED 颜色,为 偶数行 提供 GREEN 颜色,而您在第一部分有 3 行,那么最后一个单元格将具有红色,第二部分的第一个单元格也具有红色。

    所以您只需要检查上一节中的行数。如果是偶数,则应保持颜色顺序,否则只需更改该部分的颜色顺序

    【讨论】:

      【解决方案4】:

      关于部分更改颜色,需要编写自己的逻辑,

      需要使用静态 int 值而不考虑部分,并使用已使用的代码进行替换 indexpath.row 与您的价值。即

      静态整数索引;

        if ( Index % 2)
         {
           trackCell.contentView.backgroundColor = [UIColor clearColor];
         } else  {
      trackCell.contentView.backgroundColor = [UIColor colorWithRed:212/255.0 green:212/255.0 blue:212/255.0 alpha:0.1];
         }
       Index++;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多