0

私は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];
}

ただし、あるセクションの最後のセルは、次のセクションの最初のセルと同じ色になります。どうすればこれを解決できますか?

4

4 に答える 4

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
}
于 2013-02-01T13:31:12.300 に答える
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:

「WillJenkins」を見る...彼は正しい...前のセクションだけでなく、前のすべてのセクションを見る必要があります...

セクション内のすべてのセルをカウントする彼の方法は、私のものほど良くはありませんが、彼の答えは正しいものであり、彼にとっては+1です...とにかく、最良の方法は、彼のループとtableViewへの呼び出しを組み合わせることです。 tableView numberOfRowsInSection:

于 2013-02-01T13:08:02.267 に答える
0

これは、各セクションの行数が原因で発生します...

奇数行に赤の色を、偶数の色を提供しようとしていて、最初のセクションに3つの行がある場合、最後のセルは赤の色になり、2番目のセクションの最初のセルも赤の色になります。

したがって、前のセクションの行数を確認する必要があります。偶数の場合は色の順序を維持する必要があります。そうでない場合は、セクションの色の順序を単純に変更します。

于 2013-02-01T13:10:37.893 に答える
0

Regaridngセクションの色が変わります。次のような独自のロジックを作成する必要があります。

セクションに関係なくStaticint値を使用し、indexpath.rowを値に置き換えてすでに使用しているコードを使用する必要があります。すなわち

静的intインデックス;

  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++;
于 2013-02-01T13:09:26.727 に答える