Three20:searchViewController上的variableHeightRows

时间:2011-07-18 23:06:35

标签: objective-c ios three20

我无法让variableHeightRows在搜索视图控制器上工作。

TTTableViewController* searchController = [[TTTableViewController alloc] init];

searchController.dataSource = [[[SomeDataSource alloc] init] autorelease];
searchController.variableHeightRows = YES; // this doesn't affect the table

self.searchViewController = searchController;
[searchController release];
self.tableView.tableHeaderView = _searchController.searchBar;
_searchController.pausesBeforeSearching = YES;
[_searchController setSearchResultsDelegate:self];

它始终显示默认高度的行。在具有相同数据源的常规表视图中,行的高度设置为我在+ (CGFloat)tableView:(UITableView*)tableView rowHeightForObject:(id)object中提供的自定义,但特别是在搜索控制器上没有。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

经过深入调查......

我将搜索控制器的委托设置为同一个类([_searchController setSearchResultsDelegate:self];),这会阻止创建TTTableViewVarHeightDelegate委托,因此,未调用自定义heightForRowAtIndexPath。我补充说:

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
  id<TTTableViewDataSource> dataSource = (id<TTTableViewDataSource>)tableView.dataSource;

  id object = [dataSource tableView:tableView objectForRowAtIndexPath:indexPath];
  Class cls = [dataSource tableView:tableView cellClassForObject:object];
  return [cls tableView:tableView rowHeightForObject:object];
}

到TTTableViewController类(TTTableViewVarHeightDelegate的源代码)并且它可以工作。