嵌入TTTableView的空TTTableView不显示“空”消息

时间:2012-06-09 07:24:24

标签: ios three20

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

   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时,为嵌入式表格显示“表空”状态的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是我最终要解决的问题:

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

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

  3. 建立封闭表:

    self.dataSource = [DetailItemDataSource dataSourceWithObjects:                    @“”                    self.imageItem,                    @“”                    则findItem,                    @“”                    _descriptionItem,                    @“”                    self.shareItem,                    self.editItem,                    @“”                    _commentsItem,                    @“”                    _addCommentButtonItem,                    零];

  4. 当我实际获得GOT评论时,我将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];