0

テーブルビューには2つのセクションがあります。1つはテストステータス用で、もう1つは結果用です。

最初のセクションの3行目は、テストの完了時に変更されます。テスト中は完了率を記録し、変更後は問題が検出されたかどうかを示します。

テキストの色も変化して、悪い/良い/良いことを示します。この特定のテストでは、約20行の結果があります。

問題は、これらの20の結果内で、2つのセルがセクション1の3番目のセルのように扱われ、赤に変わることです。

ここで、テーブルをスクロールすると、コードが正しくなく、多くの結果が得られたテストでしか表示されなかったことを意味していると思います。どんな助けでも素晴らしいでしょう。以下のコードだと思います。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
    UITableViewCell *serverLoc = [tableView dequeueReusableCellWithIdentifier:@"speedCell"];
    //   UITableViewCell *switchCell = [tableView dequeueReusableCellWithIdentifier:@"switchCell"];

    switch (indexPath.section) {
        case 0:
            switch (indexPath.row) {
                case 0:
                    serverLoc.textLabel.text = @"Test location:";
                    serverLoc.detailTextLabel.text = testLocation;
                    serverLoc.selectionStyle = UITableViewCellSelectionStyleNone;
                    serverLoc.userInteractionEnabled = NO;
                    break;
                case 1:
                    serverLoc.textLabel.text = @"Status:";
                    serverLoc.detailTextLabel.text = statusText;
                    serverLoc.selectionStyle = UITableViewCellSelectionStyleNone;
                    serverLoc.userInteractionEnabled = NO;
                    break;
                case 2:
                    if ([TestEnded isEqualToString:@"no"]) {
                        serverLoc.textLabel.text = @"Progress";
                        serverLoc.selectionStyle = UITableViewCellSelectionStyleNone;
                        serverLoc.userInteractionEnabled = NO;
                        serverLoc.detailTextLabel.text = [NSString stringWithFormat:@"%ld%%", (long)progressInt];
                        break;
                    }
                    else {

                        serverLoc.selectionStyle = UITableViewCellSelectionStyleBlue;
                        serverLoc.userInteractionEnabled = YES;
                        serverLoc.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
                        serverLoc.textLabel.text = @"Problems Detected:";
                        serverLoc.detailTextLabel.text = [NSString stringWithFormat:@"%ld", (long)problemsDetected];

                        if (problemsDetected == 0) {
                            serverLoc.textLabel.textColor = [UIColor colorWithRed:0.0 / 255 green:102.0 / 255 blue:51.0 / 255 alpha:1.0];
                            serverLoc.detailTextLabel.textColor = [UIColor colorWithRed:0.0 / 255 green:102.0 / 255 blue:51.0 / 255 alpha:1.0];
                        }
                        else if (problemsDetected == 1) {
                            serverLoc.textLabel.textColor = [UIColor colorWithRed:226.0 / 255 green:232.0 / 255 blue:52.0 / 255 alpha:1.0];
                            serverLoc.detailTextLabel.textColor = [UIColor colorWithRed:226.0 / 255 green:232.0 / 255 blue:52.0 / 255 alpha:1.0];
                        }
                        else {
                            serverLoc.textLabel.textColor = [UIColor redColor];
                            serverLoc.detailTextLabel.textColor = [UIColor redColor];
                        }

                    }
                    break;    
            }
            break;

私が最初にそれを実装したとき、それが機能するかどうかはわかりませんでした。それは「しました」が、明らかに私はバグを明らかにするのに十分にスクロールする必要はありませんでした。

ポインタを事前に感謝します

4

1 に答える 1

1

ここのコードは問題ないようです...テーブルはこの特定のパスに設定されたセルを再利用していますが、セルを再利用する前に値をデフォルトに戻していないようです。(たとえば、セクション== 1の場合:severLoc.textLabel.textColor = [UIColor blackColor];)これは、再利用されたセルを取得するときに、ケース0,0および0,1が最終的に0.2セルになる場合にも表示されます。

于 2013-03-03T19:46:22.663 に答える