Three20: variableHeightRows для searchViewController - PullRequest
0 голосов
/ 19 июля 2011

Мне не удалось заставить 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 Ответ

1 голос
/ 22 июля 2011

После глубокого изучения ...

Я установил делегат контроллера поиска в тот же класс ([_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), и это сработало.

...