0

私はテーブルビューを持っていますが、これはすべて十分に機能していますが、最初のセルを残りのセルの「ロック解除」ボタンにしたいと考えています。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [currentPack count] + 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Row is %i", indexPath.row);

    if(indexPath.row == 0)
    {
        SoundCell *cell = [SoundCell dequeOrCreateInTable:soundsTable];
        cell._NameLabel.text = @"Unlock This Pack;
        [cell._startButton setAlpha:0.0];

        return cell
    }
    else
    {
        SoundCell *cell = [SoundCell dequeOrCreateInTable:soundsTable];
        cell._NameLabel.text = [currentPack objectAtIndex:indexPath.row - 1];

        return cell
    }
}

これでうまくいきました。最初のセルは他のセルとは異なり、見た目はまったく同じです。私の問題は、何らかの理由で、後のセルの一部が

[cell._startButton setAlpha:0.0];

それらが作成されたときに indexPath.row が 0 でなくても一部です。すべてのセルで発生するわけではなく、断続的なセルだけで発生します。テーブルを上下にスクロールすると、他のセルでもこの​​問題が発生することがあります。テーブルが正常に機能する他のすべての方法では、セルを選択すると正しい応答がトリガーされます。これを引き起こしている可能性がある人はいますか? もともと実装するのは非常に簡単なように思えました...

ありがとう

4

3 に答える 3

4

再利用時に混合しないように、2 つのセル タイプに異なる再利用識別子を使用します。

または、残りの行に次の行を追加します。

[cell._startButton setAlpha:1.0];
于 2012-04-17T14:27:04.593 に答える
1

You're getting hit by cell caching. If you're going to call setAlpha on some cells, set it on all of them so that you don't end up with a stale value from an existing cell.

于 2012-04-17T14:29:18.967 に答える
0

SoundCell の別のインスタンスを作成し、i-var として保存することをお勧めします。一度構成して、行インデックス 0 に戻ります。残りの行については、再利用可能な「通常の」セルを返します。

于 2012-04-17T14:28:33.490 に答える