Ответ 1
Измените свою реализацию tableView:numberOfRowsInSection:
в источнике данных, чтобы вернуть количество результатов поиска, а не общее количество элементов. Затем заполните эти ячейки результатами поиска, а не остальными данными.
У меня есть табличное представление с возможностью поиска, но хотелось бы отображать только количество ячеек, которые возвращаются после запуска пользователем поиска. Например, если пользователь вводит в charecter, и есть только одна ячейка, которая соответствует поиску, остальные ячейки остаютс ячейками таблицы пустыми. Мне было интересно, есть ли способ скрыть эти пустые ячейки. Мне также было интересно, есть ли способ скрыть представление таблицы, если поиск человека не соответствует каким-либо данным (по умолчанию он отображает таблицу пустых ячеек с надписью "Нет результатов" ).
Спасибо.
Измените свою реализацию tableView:numberOfRowsInSection:
в источнике данных, чтобы вернуть количество результатов поиска, а не общее количество элементов. Затем заполните эти ячейки результатами поиска, а не остальными данными.
Установите tableFooterView
в некоторый фиктивный вид ([[UIView new] autorelease]
будет работать нормально). Это побудит UITableView
показать нижний колонтитул (который будет иметь нулевой размер) вместо пустых "ячеек".
- (void) viewDidLoad
{
[super viewDidLoad];
*// self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];*
*//Since memory management is controlled by ARC now, so ignore autorelease*
self.tableView.tableFooterView = [[UIView alloc] init] ;
}
Просто вы можете использовать это.
tableView.tableFooterView = [UIView new];
Для swift 2.x xCode 7:
override func viewDidLoad() {
super.viewDidLoad()
print("∙ \(NSStringFromClass(self.dynamicType))")
...
self.tableView.tableFooterView = UIView()
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (([array count]*65) > [UIScreen mainScreen].bounds.size.height - 66)
{
Table.frame = CGRectMake(0, 66, self.view.frame.size.width, [array count]*65));
}else
{
Table.frame = CGRectMake(0, 66, self.view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 66);
}
return [array count];
}
здесь 65 - высота ячейки, а 66 - высота навигационной панели в UIViewController.
для быстрого в xcode
cell.userInteractionEnabled = false
поместите это в конец ячейки для строки по индексу таблицы
Скрытие пустых ячеек в Swift
Свифт 3 Edition
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tableView.tableFooterView = UIView(frame: CGRect.zero)
}
Свифт 2 Edition
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tableView.tableFooterView = UIView(frame: CGRectZero)
}