iPhone UITableView с UISearchBar и обновляющий указатель разделов
-
22-07-2019 - |
Вопрос
У меня есть UITableView с UISearchBar вверху.
Я также использую делегат Index Index для отображения ABC ... XYZ с правой стороны.
Проблема возникает, когда я нажимаю на поле поиска и клавиатура поднимается снизу, указатель раздела сжимается, поэтому отображаются только A D ... * Z - когда я закрываю поиск и клавиатура исчезает, индекс остается в этом «сдавленном» состоянии. состояние, пока я не прокрутите или подобное.
// animate the searchbar
[UIView beginAnimations:nil context:NULL];
CGRect tempRect = [[self searchBar] frame];
tempRect.size.width = 320-kMarginRight;
[[self searchBar] setFrame:tempRect];
[UIView commitAnimations];
// animate the search index back into view
for (UIView *view in [[self tableView] subviews]) {
if ([view respondsToSelector:@selector(moveIndexIn)]) {
MovableTableViewIndex *index = (MovableTableViewIndex*)view;
[index moveIndexIn];
}
}
// try a whole load of stuff to try and get the section indexes to draw again properly
// none of which work!
[searchBar setText:@""];
[searchBar resignFirstResponder];
letUserSelectRow = YES;
searching = NO;
[[self navigationItem] setRightBarButtonItem:nil];
[[self tableView] setScrollEnabled:YES];
[[self tableView] reloadData];
[[self tableView] flashScrollIndicators];
[[self tableView] sizeToFit];
[[self tableView] zoomScale];
[[self tableView] reloadSectionIndexTitles];
Мои вопросы: кто-нибудь видел такое поведение? Есть ли способ перерисовать индекс раздела в RHS ( [[self tableView] reloadData]
не помогает)
Спасибо миллион!
Решение
Вы должны отключить рисование индексов, когда поиск вообще активирован. Просто верните nil в вашем делегате, что-то вроде этого:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { if ([self.searchDisplayController isActive]) return nil; ... }
Другие советы
Вы можете попробовать использовать
- (void)flashScrollIndicators
который обновляет полосу прокрутки и, надеюсь, индекс раздела тоже?
Работает нормально !!!
[searchBar setContentInset: UIEdgeInsetsMake (5, 0, 5, 35)];