我试图将UISwitch添加到我的表视图中的一个单元格下面是代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FormCell *cell = (FormCell *) [tableView dequeueReusableCellWithIdentifier: @"FormCell"];
if(cell == nil) cell = [[FormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FormCell"];
if(indexPath.row == 3)
{
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 9, 50, 50)];
[mySwitch addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:mySwitch];
[[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:163.0/255.0 green:12.0/255.0 blue:17.0/255.0 alpha:1.0]];
}
return cell;
}
它的工作,问题是当我向上或向下滚动tableview时,它复制UISwitch,但在表视图的最后或开头...
任何帮助?
答案 0 :(得分:0)
记住细胞可以重复使用。你最好用自己的标识符创建自定义UITableViewCell。那里你的custimzation。
答案 1 :(得分:0)
UITableView经过高度优化,其中一项主要优化是尽可能重用表格单元格对象。这意味着表行和UITableViewCell对象之间没有永久的一对一映射。
因此,单元对象的相同实例可以重复用于多行。一旦单元格的行在屏幕外滚动,该行的单元格将进入“循环”堆,并可能重新用于另一个屏幕行。
通过创建Switch对象并将它们添加到单元格,每次第三行出现在屏幕上时,您再次将其添加到表格恰好为第3行“出列”的任何Cell对象中。
如果您要向可重用单元格添加内容,则必须使用相应的代码将Cell重新用于另一个表行时将其重置为默认值。
答案 2 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
FormCell *cell = (FormCell *) [tableView dequeueReusableCellWithIdentifier: @"FormCell"];
if(cell == nil){
cell = [[FormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FormCell"];
}
else
{
for (UIView *subview in [cell subviews])
{
[subview removeFromSuperview];
}
}
if(indexPath.row == 3)
{
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 9, 50, 50)];
[mySwitch addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
[cell.contentView addSubview:mySwitch];
[[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:163.0/255.0 green:12.0/255.0 blue:17.0/255.0 alpha:1.0]];
}
return cell;
}
这不会在表格滚动上复制UISwitch
另一种方法是将reuseIdentifier
设置为nil
。
希望这会有所帮助。