1

5つUITableViewのセクションと、各セクション内に複数の異なる行を持つものがあります。

セクションを含む TableView

UISwitchTableViewに追加するための私のコード

switchForNotification = [[UISwitch alloc]initWithFrame:CGRectMake(300, 10, 100, 40)];
[switchForNotification addTarget:self action:@selector(Notification) forControlEvents:UIControlEventValueChanged];
switchForNotification.on = NO;

[cell.contentView addSubview:switchForNotification];

したがって、TableViewCell に追加されます。
しかし、スクロールすると、それに応じてテーブルが UITableView メソッドでリロードされ、スイッチが他のセルに追加されます。

スクロールとリロード中にカスタムコントロールをセルに自動的に追加するというこの問題を防ぎたいです。

どうやってやるの ?

任意の提案をいただければ幸いです。

前もって感謝します。

4

4 に答える 4

3

1つのUILable、UISwitch、およびUIImageviewを含む1つのカスタムセルを作成できます...

indexpath.row に従って、必要に応じてこのサブビューを表示および非表示にします。

于 2013-06-27T10:17:10.670 に答える
2

このコードを試してください。このコードを cellFotRowAtIndexPath に追加します

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
for (UIView *subview in subviews)
{
    if([subview isKindOfClass:[UIView class]])
        [subview removeFromSuperview];
    else if([subview isKindOfClass:[UIImageView class]])
        [subview removeFromSuperview];
    else if([subview isKindOfClass:[UILabel class]])
        [subview removeFromSuperview];
    else if([subview isKindOfClass:[UISwitch class]])
        [subview removeFromSuperview];
}

[subviews release];
于 2013-06-27T06:49:16.380 に答える
0

あなたがする必要があるのは、UITableViewCellあなたが持っているテーブルビューセルの数に応じて、いくつかの異なるインスタンスを持つことです。

それぞれに再利用識別子が割り当てられます。

次に、cellForRowAtIndexPathのセクションまたは行に応じてindexPath、適切なセルをデキューし、任意のデータを設定して、それを返します。

たとえば、スイッチ、イメージ、その他の 3 種類のセルがあると仮定すると、次のようにデキューします。

static NSString *kCellReuseIdentifierSwitch = @"SwitchCell";
static NSString *kCellReuseIdentifierImage = @"ImageCell";
static NSString *kCellReuseIdentifierOther = @"OtherCell";


if (indexPath.row == 0)
{
    MySwitchCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifierSwitch forIndexPath:indexPath];
}
else if (indexPath.row == 1)
{
    MyImageCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifierImage forIndexPath:indexPath];
}
else if (indexPath.row == 2)
{
    MyOtherCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentifierOther forIndexPath:indexPath];
}

この例では、メソッドによってセルのインスタンス化が処理される iOS 6 以降を想定していますdequeue

于 2013-06-27T07:47:05.007 に答える