1

我有一个UITableView有 5 个部分,每个部分中有多个不同的行。

带部分的 TableView

我添加UISwitch到 TableView的代码

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

您可以制作一个自定义单元格,其中包含一个 UILable、UISwitch 和 UIImageview...

现在根据 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,将相应的单元格出列,设置任何数据,然后返回。

因此,例如,假设您有开关、图像和其他三种类型的单元格,您将按如下方式出列:

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];
}

dequeue此示例假定 iOS 6 或更高版本由该方法为您处理单元格实例化。

于 2013-06-27T07:47:05.007 回答
0
if (cell==nil){cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle
                   reuseIdentifier:CellIdentifier]; }
于 2013-11-21T12:12:50.633 回答