0

私のアプリでは、ユーザーが人、名前、住所などの属性を編集できる詳細ビューがあります。

2つのセルでは、コンテンツを編集するためにそれらを選択できるのではなく、適切なアクセサリであるUISwitchがありますが、一貫性がない場合もありますが、前のセクションで他のセルに複製されます。

私は自分のコードを細かい櫛で何十回もスキャンしてきましたが、気の毒な原因を見つけることができません。これは何が原因でしょうか?単一のセルにUISwitchを作成するために使用するコードは次のとおりです。

if (indexPath.section == 0 && indexPath.row == 1) 
{
    cell.textLabel.text = @"Confirmed";

    //Make the cell unselectable
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    //Create and add uiswitch
    confirmedSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
    [confirmedSwitch addTarget:self action:@selector(switchConfirmedStatus:) forControlEvents:UIControlEventValueChanged];
    [confirmedSwitch setOn:[venue.isConfirmed boolValue]];
    cell.accessoryView = confirmedSwitch;
}

それで、あなたはそれがそのセルにのみ現れることを期待します、そのコードで何か奇妙なものを見ますか?ifステートメントとすべての角かっこindexPathチェックが正しいことを確認しました。

誰かが前にこれを見たり、何か手がかりがありますか?

4

2 に答える 2

3

問題は、の問題が原因reusabilityですUITableView。おそらくidentifierすべてのセルに同じものを使用します。これにより、cellForRowAtIndexPathが他の行に実装されます(上下にスクロールした場合)。

これは、でアプリケーションを開発しているときによくある問題でtableViewあり、StackOverflowにはこのような質問がたくさんあります。

一般的な解決策として、これらのいずれかを実行する必要があります。

  1. dequeueReusableCellWithIdentifierセルごとに割り当てるときは、異なる識別子を使用してください。これは非常に簡単で、異なる識別子を割り当てる必要があります。

  2. あなたをサブクラス化し、に必要なコンポーネントを実装するUITableViewController独自のものを作成します。メソッドをオーバーライドする必要があると思います。CustomTableViewControllercellset Layout Subviews

于 2012-04-07T07:04:45.687 に答える
0

ビュー内の配列を取得し、この行にオブジェクト0を追加し、他のすべての行に1を追加します。次に、cellForRowAtIndexPathで、配列のインデックスに0があるかどうかを確認し、それ以外の場合はnillに切り替えます。

for(int i =0;i<10;i++)
{
    if(i==1)
    {
        [arrayForSwitch addObject:@"0"];
    }
    else
    {
        [arrayForSwitch addObject:@"1"];
    }
}

次に、cellForRowAtIndexPath書き込み条件で

if([arrayForSwitch objectAtIndex:indexPath.row isEqualToString:@"0"])
{
    cell.accessoryView = confirmedSwitch;
}
else
{

    cell.accessoryView =UITableViewCellAccessoryNone;
}

これで同じままになります

于 2012-04-07T04:19:52.703 に答える