0

我在另一个 TTTableView 中嵌入了一个 TTTableView (_commentsItem),如下所示:

   self.dataSource = [DetailItemDataSource dataSourceWithObjects:
                       @"", 
                       self.imageItem,
                       @"", 
                       findItem, 
                       @"",
                       _descriptionItem,
                       @"",
                       self.shareItem,
                       self.editItem,
                       @"",
                       _commentsItem,
                       @"",
                       _addCommentButtonItem,
                       nil];

当 _commentsItem 有行时,一切正常。我什至可以在 _commentsItem 中向表中添加行,调用 [..refresh],并且封闭表会相应地自行调整。

当 _commentsItem 为空时会出现问题。通常,您希望得到一个覆盖整个屏幕的 TTErrorView,但我什么也没得到(实际上,我什至不希望它覆盖整个屏幕,我只想让“emptyTitle”显示出来。

我认为问题出在 TTTableView 的“ShowEmpty”中,它正在创建另一个包含 TTErrorView 的视图,而封闭表对此一无所知:

- (void)showEmpty:(BOOL)show {
  if (show) {
    NSString* title = [_dataSource titleForEmpty];
    NSString* subtitle = [_dataSource subtitleForEmpty];
    UIImage* image = [_dataSource imageForEmpty];
    if (title.length || subtitle.length || image) {
    TTErrorView* errorView = [[[TTErrorView alloc] initWithTitle:title
                                                      subtitle:subtitle
                                                         image:image] autorelease];
    errorView.backgroundColor = _tableView.backgroundColor;
    self.emptyView = errorView;

  } else {
    self.emptyView = nil;
  }
  _tableView.dataSource = nil;
  [_tableView reloadData];

  } else {
    self.emptyView = nil;
  }

}

我怀疑当它的 TTTableView 嵌入另一个 TTTableView 时 showEmpty 并不是真的要正常工作,但是问题就变成了如何做到这一点。封闭表期望 _commentsItem 是一个 TTTableViewItem,所以我不能将 _commentsItem 的视图换成一个 UILabel。

所以问题是:当您在另一个 TTTableView 中嵌入了一个 TTTableView 时,为嵌入的表格显示“表格空”状态的最佳方式是什么?

谢谢!。

4

1 回答 1

0

这是我最终解决此问题的方法:

  1. 在创建封闭的 TTTableView 时,我决定是否要在存在评论时嵌入表格视图 (TTTableView),或者是一个简单的空消息 [TTTableTextItem itemWithText:@"No Comments Yet!"];

  2. 将 TTTableView 或 TTTableTextItem 项分配给名为 _commentsItem 的 TTTableItem *(TTTableView 和 TTTableTextItem 的超类)

  3. 构建封闭表:

    self.dataSource = [DetailItemDataSource dataSourceWithObjects:@"",self.imageItem,@"",findItem,@"",_descriptionItem,@"",self.shareItem,self.editItem,@"",_commentsItem,@"", _addCommentButtonItem,无];

  4. 当我真正得到评论时,我将 TTTableTextItem 换成了一个新的 TTTableView:

    _commentsPresentItem = 
    [[DetailCommentsItem alloc] initWithFilter:self.lfm.object_id 
                                      detailViewController:self];
    _commentsItem  = _commentsPresentItem;
    
    // This is SUPER important. Without it the TTTableView in the
    // DetailCommentsItem won't appear properly.
    [[_commentsItem commentsViewController] viewWillAppear:TRUE];
    
    // Update OUR data source to signal we're swapped out row. Remember,
    // the source is a NSArray of SECTIONS each containing a NSArray of rows
    // for the section.
    unsigned int section  = [[self commentsItemIndexPath] section];
    unsigned int row      = [[self commentsItemIndexPath] row];
    [[[[self dataSource] items] objectAtIndex:section] removeObjectAtIndex:row];
    [[[[self dataSource] items] objectAtIndex:section] insertObject:_commentsPresentItem 
                                                  atIndex:row];
    
    //Notify the table view
    NSArray *x  = [[NSArray alloc] initWithObjects:_commentsItemIndexPath, nil];
    [self.tableView beginUpdates];
    [self.tableView reloadRowsAtIndexPaths:x withRowAnimation:UITableViewRowAnimationFade];
    [self.tableView endUpdates];
    
  5. 无论我们是否创建了一个新表,都会调用这个位 - 当我们添加新注释以强制包含的表正确更新它的视图时,我们需要它。包括在内是为了完整性。

    [[_commentsPresentItem commentsViewController] invalidateModel];
    [[_commentsPresentItem commentsViewController] refresh];
    
于 2012-06-11T16:49:24.663 回答