我有一个包含两个部分UITableView
的应用程序。现在我想添加UISearchBar
以允许搜索。搜索真的很好,并选择正确的单元格。搜索时,您可以看到有可以选择的单元格,但标签为空白。这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"qrCodeCell";
QRTableViewCell *cell = (QRTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[QRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (indexPath.section == 0) {
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];
if (tableView == self.searchDisplayController.searchResultsTableView) {
//NSLog(@"%@",[[self.searchResultsQR objectAtIndex:indexPath.row] valueForKey:@"data"]);
[cell.dataLabel setText:[[self.searchResultsQR objectAtIndex:indexPath.row] valueForKey:@"data"]];
//NSLog(@"%@",cell.dataLabel.text);
NSDate *timeStamp = [[self.searchResultsQR objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
[cell.timeLabel setText:[format stringFromDate:timeStamp]];
} else {
[cell.dataLabel setText:[[self.qrcodes objectAtIndex:indexPath.row] valueForKey:@"data"]];
NSDate *timeStamp = [[self.qrcodes objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
[cell.timeLabel setText:[format stringFromDate:timeStamp]];
}
} else if (indexPath.section == 1) {
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];
if (tableView == self.searchDisplayController.searchResultsTableView) {
[cell.dataLabel setText:[[self.searchResultsScanned objectAtIndex:indexPath.row] valueForKey:@"data"]];
NSDate *timeStamp = [[self.searchResultsScanned objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
[cell.timeLabel setText:[format stringFromDate:timeStamp]];
} else {
[cell.dataLabel setText:[[self.scannedCodes objectAtIndex:indexPath.row] valueForKey:@"data"]];
NSDate *timeStamp = [[self.scannedCodes objectAtIndex:indexPath.row] valueForKey:@"timeStamp"];
[cell.timeLabel setText:[format stringFromDate:timeStamp]];
}
}
return cell;
}
这与问题几乎完全相同,但问题无法解决:UISearchBar with UITableView containing custom cells => blank cells和It doesn't show the contents of the cells in a UITableView filtered by a UISearchDisplayController
如果有人可以帮助我,我真的很感激!
修改
以下是我TableViewController
的更多代码:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"data contains[c] %@", searchText];
self.searchResultsQR = [self.qrcodes filteredArrayUsingPredicate:resultPredicate];
self.searchResultsScanned = [self.scannedCodes filteredArrayUsingPredicate:resultPredicate];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
答案 0 :(得分:0)
您的手机未正确注册。这意味着您的代码将运行:
cell = [[QRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
不会创建所有子视图或连接任何商店。
您需要找出您的手机未正确注册的原因。如果您在故事板中创建它,那么它应该包含在将要使用它的表视图中(它应该自动注册单元格)。如果您在独立的XIB文件中创建它,那么您需要加载NIB并在加载表视图时显式注册它。
您有2个表视图,单元格注册了一个而不是另一个 - 这是原型单元的工作方式。
您最好的选择:
- 删除原型单元,创建一个XIB并明确地向每个表视图注册NIB
- 不使用搜索控制器(因此您只有1个表视图,自己管理搜索栏)
These are a few references which you can look forward to.
This is a tutorial for implementing search delgates with storyboard
还找到了关于SO的讨论,这可能会给你一些方向,指出你出错的地方
Search Bar in UITableView doesn't display text in Cell label