将UISwitch添加到TableView中的一个单元格

时间:2013-03-11 19:42:03

标签: ios objective-c uitableview uiswitch

我试图将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,但在表视图的最后或开头...

任何帮助?

3 个答案:

答案 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。 希望这会有所帮助。