1

これに関連する他の質問をここで見ましたが、私はそれらの解決策を用意しており、スクロールすると物事はまだ動き回っています。

基本的に、データのテーブルがあり、最初の行と唯一の行にUITableViewCellAccessoryDisclosureIndicatorが必要です。問題は、スクロールすると、インジケーターが複製され、削除され、他のセルに移動することです。これが私のコードです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }    

    if(indexPath.row == 0) {      
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;           
    }

    cell.textLabel.text = [tabledata objectAtIndex:indexPath.row];

    return cell;
}

問題は、indexPath.row変数に問題があります。最初ではない他のセルで0を返す(セルの表示に関して)。ただし...データは常に私の配列(値が正しいことを意味します)からのものであり、

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

メソッドでは、行0がクリックされたときにのみ画面を変更したいと思います。スクロールした場所に関係なく、最初のセルを除いてセルはトリガーされません。したがって、cellForRowAtIndexPath内のチェックは正しくないのに、チェックは常に正しいようです...

4

1 に答える 1

1

ほとんどの場合、すでにセットが設定されているセルを再利用していますaccessoryType。表示されるべきではないセルに表示されないように明示的に設定する必要があります。

if(indexPath.row == 0){      
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;       
} else {
    cell.accessoryType = UITableViewCellAccessoryNone;
}
于 2012-06-15T19:13:56.070 に答える