开发者

Three20: variableHeightRows on a searchViewController

开发者 https://www.devze.com 2023-03-21 09:31 出处:网络
I couldn\'t get variableHeightRows to work on a search v开发者_如何学Pythoniew controller. TTTableViewController* searchController = [[TTTableViewController alloc] init];

I couldn't get variableHeightRows to work on a search v开发者_如何学Pythoniew controller.

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];

It always show the rows in the default height. On my regular table view with the same datasource, the height of the rows is set to the custom one I supply in + (CGFloat)tableView:(UITableView*)tableView rowHeightForObject:(id)object, but specifically not on the search controller.

Am I doing it wrong?


After deep investigation...

I set the delegate of the search controller to the same class ([_searchController setSearchResultsDelegate:self];), something which prevented from a TTTableViewVarHeightDelegate delegate to be created, therefore, the custom heightForRowAtIndexPath wasn't called. I added:

- (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];
}

to the TTTableViewController class (source of TTTableViewVarHeightDelegate) and it worked.

0

精彩评论

暂无评论...
验证码 换一张
取 消