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」を表示させたいだけです。

問題は、TTErrorView を含む別のビューを作成している TTTableView の "ShowEmpty" にあると思いますが、囲んでいるテーブルはそれについて何も知りません。

- (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 アイテムを TTTableItem * (TTTableView および TTTableTextItem のスーパークラス) _commentsItem に割り当てました。

  3. 囲んでいるテーブルを作成します。

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

  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 に答える