CoreDataBooks向tableview添加新单元格

时间:2009-10-15 06:07:45

标签: iphone uitableview core-data

我最近下载了Apple的示例应用程序 CoreDataBooks ,为了学习,我决定将一个单元格添加到 RootViewController.m 表视图中的最后一条记录,这将显示获取的记录数。

我添加的代码如下所示。我没有达到添加获取计数的程度,因为我的代码结果不好。如果您下载CoreDataBooks并将表视图数据源方法替换为此处的代码,您将看到以下内容:

  1. 将新单元格添加到表格视图的底部。
  2. 当您向后滚动到表格的顶部时,另一个单元格将接收仅应该提供给表格的最后一个单元格的格式。就我而言,在“比尔·布赖森”的作者部分,书名“大国的笔记”变为蓝色,当你滚动回到桌面顶部时,它的中心位置。
  3. 任何帮助解决这个问题都将受到赞赏。

    以下是示例应用CoreDataBooks的链接link text

    以下是 RootViewController.m 的修改代码:

    /*
    The data source methods are handled primarily by the fetch results controller
    */
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [[fetchedResultsController sections] count] + 1;
    }
    
    
    // Customize the number of rows in the table view.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     {
    if (section < [[fetchedResultsController sections] count])
    {
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController   sections]  objectAtIndex:section];
      return [sectionInfo numberOfObjects];
    }
    
    return 1;
    }
    
    
    // Customize the appearance of table view cells.
    - (UITableViewCell  *)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath {
    
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSLog(@"indexPath.section: %i",indexPath.section);
    if (indexPath.section <  [[fetchedResultsController sections] count]){
        if (cell == nil) {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier] autorelease];
        }
    
    // Configure the cell.
    [self configureCell:cell atIndexPath:indexPath];
     }
    else{
       if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier] autorelease];
     }
     cell.textLabel.text = (@"This is a NEW Cell...");
     cell.textLabel.textAlignment = UITextAlignmentCenter;
     cell.textLabel.textColor = [UIColor blueColor];
    }
     return cell;
    }
    
    
    - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    
     // Configure the cell to show the book's title
     Book *book = [fetchedResultsController objectAtIndexPath:indexPath];
     cell.textLabel.text = book.title;
    }
    
    
    - (NSString *)tableView:(UITableView *)tableView 
    titleForHeaderInSection:(NSInteger)section {
    // Display the authors' names as section headings.
      if (section < [[fetchedResultsController sections] count])
        return [[[fetchedResultsController sections] objectAtIndex:section] name];
    
       return @"";
    
    }
    

    这就是全部。谢谢你的时间。

1 个答案:

答案 0 :(得分:3)

我看到两个解决方案:

  1. 为您的单元格使用不同的单元格标识符。
  2. 为此,请在另一个之后定义新的单元格标识符,并在两个不同的单元格案例中移动单元格重用代码:

    static NSString *CellIdentifier = @"Cell";
    static NSString* myCellIdentifier = @"MyCell"; // new cell identifier
    
    // move inside two cell cases
    // UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSLog(@"indexPath.section: %i",indexPath.section);
    if (indexPath.section <  [[fetchedResultsController sections] count]){
       UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];       // only reuse this type of cell here
    if (cell == nil) {
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier] autorelease];
    }
    
    // Configure the cell.
    [self configureCell:cell atIndexPath:indexPath];
    }
    else{
       UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myCellIdentifier]; // only reuse this type of cell here
    
    if (cell == nil) {
    

    2。配置单元格时覆盖所有适用的格式:

    cell.textLabel.text = (@"This is a NEW Cell...");   // You are already overriding the only cell attribute that the book cell configures
     cell.textLabel.textAlignment = UITextAlignmentCenter;
     cell.textLabel.textColor = [UIColor blueColor];
    }
     return cell;
    }
    
    - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    
     // Configure the cell to show the book's title
     Book *book = [fetchedResultsController objectAtIndexPath:indexPath];
     cell.textLabel.text = book.title;
     cell.textLabel.textAlignment = UITextAlignmentLeft;   // I assume Left is the default alignment
     cell.textLabel.textColor = [UIColor blackColor];   // I assume black is the default color
    }