-2

で 8 個のセルを使用していUITableViewます。各セルには、 、 、 などのコンポーネントのグループがUIButtonありUILabelますUISlider。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;
 }
4

3 に答える 3

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

うまくいけば、うまくいくでしょう。ありがとう。

于 2013-01-11T10:55:54.983 に答える
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

于 2013-01-11T10:31:36.527 に答える
0

設定してみる

NSString *CellIdentifier = [NSString stringWithFormat: @"%d:%d", indexPath.row, indexPath.section];
于 2013-01-11T10:47:45.167 に答える