我正在使用UISearchDisplayController来显示基于自服务器获取的某些数据的带有自定义单元格的表。
首先,我在UIViewController中设置UISearchDisplayController。
self.searchController = [[UISearchDisplayController alloc]
initWithSearchBar:self.mySearchBar contentsController:self];
self.searchController.delegate = self;
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
我的UIViewController还实现了UISearchBarDelegate,因此我可以确定何时开始搜索。我设置了一个块,以便在我的api调用返回时被调用,并将结果字典保存在self.searchResults属性中:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
// here we make the api call
[api getSomeInfo:searchBar.text complete:^(NSDictionary *json) {
self.searchResults = json;
[self.searchController.searchResultsTableView reloadData];
}];
}
现在,我遇到的问题是在UITableViewDataSource方法中返回自定义单元格的位置。我的单元已实例化,但它的IBOutlets从未初始化,因此我无法正确设置其内容(文本,图像等):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == self.searchController.searchResultsTableView) {
cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultsCellIndentifier"];
if (cell == nil) {
cell = [[SearchResultsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
cell.customLabel.text = [self.searchResults objectForKey:@"customText"]; // cell exists but cell.customLabel is nil!!
}
}
为什么内容为零?我的“自定义单元格”类中是否应该设置内容?
谢谢!
最佳答案
我认为您的问题是在创建单元格时使用了变量cellIdentifier
,但是在出队时使用了字符串常量。
简单地总是重新创建一个单元是可以的,但是根本没有效率,并且会导致大量内存泄漏。
您应该首先根据所处的表视图以及所需的单元格类型设置cellIdentifier,然后使用该cellIdentifier出队,然后根据需要创建一个新的cellIdentifier。