在iOS中滚动TableView时保留Tableview单元格值

时间:2013-06-27 06:25:41

标签: ios uitableview reloaddata

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

TableView with Sections

我在

中添加 UISwitch 的代码
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中。
但是,当我滚动时,Table会使用UITableView方法相应地重新加载,并且switch将被添加到其他单元格中。

我想防止在滚动和重新加载时自动将自定义控件添加到单元格中的问题。

我该怎么做?

任何建议都将受到赞赏。

提前致谢。

4 个答案:

答案 0 :(得分:3)

您可以创建一个包含一个UILable,UISwitch和UIImageview的自定义单元格...

现在根据indexpath.row根据需要显示和隐藏此子视图。

答案 1 :(得分: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];

答案 2 :(得分: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];
}

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

答案 3 :(得分:0)

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