表视图自动加载

时间:2013-01-11 10:27:55

标签: iphone ios xcode

我在UITableView中使用了8个单元格。每个单元格都有一组组件,例如UIButtonUILabelUISlider。当我更新第6个单元格时,它会反映到第1个cell。同样,如果我更新第7个单元格,它会反映到第2个单元格。

我该如何防止这种情况?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    
   return 1;
 }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return viewcount;
 }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
   NSString *MyIdentifier=@"mycell";


   ListCell1 *cell = (ListCell1 *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

  if (cell == nil)
  {
    cell = [[ListCell1 alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier]; 
  }

  cell.selectionStyle = UITableViewCellSelectionStyleNone;
  UIButton *b=[buttonarray objectAtIndex:indexPath.row];

  cell.imageView.frame=CGRectMake(0, 0, 0, 0);
  b.imageView.frame=CGRectMake(0, 0, 30, 30);
  cell.imageView.image=b.imageView.image;
  return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    
   UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
   ListCell1 *cell1 = (ListCell1 *)[tableView cellForRowAtIndexPath:indexPath];

   [cell1 addSubview:delbutton];
   delpath=indexPath;
 }

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
   return 100.0;
 }

3 个答案:

答案 0 :(得分:0)

使用

更新cellForRowAtIndexPath方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
       // cell.selectionStyle = UITableViewCellSelectionStyleNone;

    }
    **// and add UIButton, UILabel and UISlider. in cell.contentView**

}

可能对你有帮助:))

修改

在您的情况下,您只需要更改NSString *CellIdentifier将此内容添加到我的答案中
并为初始化创建放置在单元格上的所有组件的自定义方法,在此方法中,只对所有组件进行初始化并在初始化后完成在创建单元格之前调用此方法,调用此方法后,您需要将此组件添加到UITableVieCellcell.ContentView);)尝试:)

答案 1 :(得分:0)

尝试设置

NSString *CellIdentifier = [NSString stringWithFormat: @"%d:%d", indexPath.row, indexPath.section];

答案 2 :(得分:0)

试试CellForRowAtIndexPath

代码::

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CustomCellIdentifier = @"name";
    customCell *cell = (customCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
    if (cell == nil)
    {
        NSArray *nib;
        nib= [[NSBundle mainBundle] loadNibNamed:@"name" owner:self options:nil];
        for (id oneObject in nib)
            if ([oneObject isKindOfClass:[customCell class]])
                cell = (customCell *)oneObject;

        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

        cell.imageView.frame=CGRectMake(0, 0, 0, 0);
        b.imageView.frame=CGRectMake(0, 0, 30, 30);
        cell.imageView.image=b.imageView.image;
    }
    return cell;
}

希望它会起作用。感谢。