0

私は困惑しており、これを自分で解決することはできませんが、ここでこの問題の多くのケースがあることを十分に認識しています. に合計 4 つのセルのみを表示したいのですmyTableView2 UITableViewが、この行のためにセルが間違いなく再利用されていることがわかりました。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

行を削除すると、新しいセルif(!cell)の作成が無効になる可能性があることは理解UITableViewしていますが、セルの作成が義務付けられているため、機能しません。何かご意見は?以下にコードを掲載しました。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

 if (!cell)
 {
    NSLog(@"CREATING NEW CELL");
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.contentView.autoresizesSubviews = YES;
    cell.contentView.clipsToBounds = YES;
 }
 if (tableView == self.myTableView)
 {
  if ([[array objectAtIndex:indexPath.row] isKindOfClass:[NSNumber class]])
  {        
    cell.textLabel.text = [[array objectAtIndex:indexPath.row] stringValue];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.textAlignment = NSTextAlignmentCenter;
  }
  else
  {        
    cell.textLabel.text = [array objectAtIndex:indexPath.row];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.textAlignment = NSTextAlignmentCenter;
  }
 }
 if (tableView == self.myTableView2)
 {
    self.myTableView2.opaque = NO;
    self.myTableView2.backgroundColor =  [UIColor colorWithRed:(0.0/255.0) green:(0.0/255.0) blue:(102.0/255.0) alpha:1.0];
    self.myTableView2.backgroundView  = nil;

    if ([[array2 objectAtIndex:indexPath.row] isKindOfClass:[NSNumber class]])
    {
        cell.textLabel.text = [[array2 objectAtIndex:indexPath.row] stringValue];
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
        cell.textLabel.textAlignment = NSTextAlignmentCenter;
        cell.textLabel.numberOfLines = 0;
        [cell.textLabel sizeToFit];
        cell.textLabel.font = [self fontForCell];
    }
    else
    {
        cell.textLabel.text = [array2 objectAtIndex:indexPath.row];
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;
        cell.textLabel.textAlignment = NSTextAlignmentCenter;
        cell.textLabel.numberOfLines = 0;
        [cell.textLabel sizeToFit];
        cell.textLabel.font = [self fontForCell];
    }
 }
 return cell;
}

その他の関連データ:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
 if (tableView==self.myTableView)
 {
    return [array count];
 }
 else if(tableView==self.myTableView2)
 {
    return [array2 count];
 }
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 if (tableView==self.myTableView)
 {
    return [array count];
 }
 else if(tableView==self.myTableView2)
 {
    return [array2 count];
 }
}
4

1 に答える 1

1

解決しました!

問題 #1: NSDictionary「for」ループは不要であり、複数のエントリに貢献していました。ループを消しました。

問題 2:numberOfSectionsInTableViewnumberOfRowsInSection. 以下、修正版。教訓:numberOfSectionsInTableView配列のインスタンスを 1 つだけ表示したい場合は、1 を反映させます。値が 2 の場合、2 つのインスタンスが表示されます。以下同様です。

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
 if (tableView==self.myTableView)
 {
    return [array count];
 }
 else if(tableView==self.myTableView2)
 {
    return 1;
 }
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 if (tableView==self.myTableView)
 {
    return 5;
 }
 else if(tableView==self.myTableView2)
 {
    return [array2 count];
 }
}
于 2013-04-15T19:48:58.090 に答える