#iphone #uitableview #ios7 #uisearchbar #uisearchdisplaycontroller
#iPhone #uitableview #ios7 #панель пользовательского поиска #uisearchdisplaycontroller
Вопрос:
у меня есть viewcontroller, содержащий несколько tableviews, управляемых одним и тем же viewcontroller.я добавил поиск к одному из tableviews… я добавил панель поиска amd searchisplaycontroller и подключил выходы для searchdelegate, searchdatasource, searchbar.и т.д…
у меня есть код для фильтрации содержимого таблицы, работающий правильно…
ниже приведен код внутри метода cellforrowatindexpath
static NSString *simpleTableIdentifier = @"search";
SearchFieldsCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[SearchFieldsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
NSDictionary *field=nil;
if (tableView == self.searchDisplayController.searchResultsTableView) {
field = _searchfieldsArray[indexPath.row];
}
else{
field = _fieldsArray[indexPath.row];
}
cell.titleLabel.text=field[@"a"];
cell.subtitleLabel.text=field[@"b"];
cell.detailLabel.text=field[@"c"];
cell.flagImage.image=[UIImage imageNamed:@"ic_flag.png"];
return cell;
но он не отображает содержимое tableview … даже высота tableviewcell установлена и во время выполнения … если я дам printobject, например, po cell.titlelabel.text, в консоли отладки это дает результат, подобный
<UILabel: 0xc15d500; frame = (70 0; 241 21); text = 'result'; userInteractionEnabled = NO; layer = <CALayer: 0xc15d5b0>>
далее я обнаружил, что строка кода
SearchFieldsCell *cell=[tableViewdequeueReusableCellWithIdentifier:simpleTableIdentifier];
отлично работает, т.Е. загружает ячейки прототипа из раскадровки, но строка
if (cell == nil) {
cell = [[SearchFieldsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
возвращает пустые белые ячейки, которые каким-то образом не загружаются из ячеек прототипа из раскадровки… как это может произойти …?? кто-нибудь, пожалуйста, помогите…
Комментарии:
1. Используете ли вы ячейку прототипа или пользовательскую ячейку, как вы упомянули — SearchFieldsCell ??
2. прототип ячейки в раскадровке… пользовательский класс для него — SearchFieldsCell
Ответ №1:
Попробуйте ввести приведенную ячейку с пользовательским классом ячейки. Таким образом, он будет инициализироваться и не будет иметь нулевое значение.
SearchFieldsCell *cell = (SearchFieldsCell *)[tableView dequeueReusableCellWithIdentifier: simpleTableIdentifier];
Надеюсь, это вам поможет.
Спасибо.
Комментарии:
1. привет, я пробовал это, но не сработало … как-то только в таблице поиска searchdisplaycontroller ячейки становятся пустыми
Ответ №2:
я знаю, что это сделано не так … но после стольких разных способов решением было создать пользовательский файл xib и заставить uisearchresultscontrollers tableview зарегистрировать этот файл nib. это сработало
[self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"SearchFieldsCell"
bundle:[NSBundle mainBundle]]
forCellReuseIdentifier:@"Search"];