Создайте поведение UISearchBar с UIView в tableHeaderView - PullRequest
3 голосов
/ 11 января 2012

Если у меня есть UISearchBar для tableHeaderView, панель поиска автоматически скрывается, когда я прокручиваю вниз представление таблицы.Я хочу такое же поведение, но вместо этого добавляю UISearchBar в tableHeaderView. Я хочу добавить UIView.

Это видео проблемы:

http://www.youtube.com/watch?v=NPTRaT2A5vU

Ответы [ 5 ]

1 голос
/ 23 февраля 2012

Мне еще предстоит найти решение, которое правильно имитирует автоматическое (недокументированное, насколько я вижу) поведение прокрутки, которое вы получаете от UISearchBar, назначенного UITableView.tableHeaderView в UINavigationController. Помимо вашего видео, такое поведение также можно увидеть в приложениях Apple для iOS, таких как Почта и Музыка.

Один из способов, которые я нашел для достижения этой цели, - назначить UISearchBar для tableHeaderView, а затем добавить свой пользовательский вид поверх UISearchBar (который является подклассом UIView). Вы по-прежнему получаете специальное поведение прокрутки таблицы, чтобы скрывать и раскрывать заголовок таблицы, но вместо этого вы используете свое собственное представление. Это предполагает, что вы можете сделать ваш вид того же размера, что и UISearchBar.

Например, в viewDidLoad:

self.tableView.tableHeaderView = [[[UISearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)] autorelease];
[self.tableView.tableHeaderView addSubview:myView];

По общему признанию, немного взломать, но эта стратегия, кажется, работает.

1 голос
/ 11 января 2012

Используйте TableView в ViewController (не TableViewController), а затем добавьте только SearchBar в верхнюю часть этого представления (измените размер табличного представления, чтобы разместить его).Я делаю это почти со всеми моими венчурными капиталистами, где мне нужно фильтровать, используя панель поискаЭто сохраняет панель поиска видимой и работает хорошо.

Я могу отправить полный пример, если мне нужно

0 голосов
/ 15 июля 2015

Чтобы повторить ответ Даана Вермёлена, достаточно просто сместить представление прокрутки по высоте панели поиска.Поскольку я добавляю панель поиска в представление заголовка таблицы, я перемещаю прокрутку на высоту высоты представления заголовка.Я нацеливаюсь на iOS8, и это идет к методу viewdidload;поэтому бит кода выглядит следующим образом:

//initiate the search controller
//use the original tableview controller itself to manage search
//don't dim the underlying content to show the filtered results as the user types into the search bar.
//search scope bar is not used. assign an empty array to the scopebuttontitles property (this is required with iOS8)
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.scopeButtonTitles = [[NSArray alloc] init];

//use the original tableview controller as a delegate and implement the UISearchResultsUpdating protocol
//add the search bar view to the table view header
//search view covers the table view when active. make the table view controller define the presentation context
//to ensure that search bar fits the screen. (this is required with iOS8)
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
[self.searchController.searchBar sizeToFit];

//offset scrollview content by tableheaderview height
self.tableView.contentOffset = CGPointMake(0, self.tableView.tableHeaderView.bounds.size.height);
0 голосов
/ 09 октября 2013

Если кто-нибудь прочитает это, как я, я найду решение этой проблемы. Это довольно просто

myTableView.contentOffset = CGPointMake(0, heightOfView);

Таким образом, вы должны знать высоту представления для этого, и есть еще один недостаток этого решения. Если в табличном представлении недостаточно содержимого для прокрутки, и вы прокрутите вниз, откроется представление, и вы больше не сможете его скрыть. В моем случае это пока приемлемо.

Если есть кто-то, кто получил функциональность UISearchBar, работающую с UIView. Пожалуйста, напишите:)

Надеюсь, это кому-нибудь поможет

0 голосов
/ 11 января 2012

Таким образом, в буквальном смысле слова это видео не добавляет tableHeaderView и помещает пользовательское представление в первую ячейку, используя свойство .contentView ячейки, а затем начинает добавлять тестовые ячейки. Таким образом, метод cellViewForIndexPath вы берете indexPath и проверяете, равен ли он 0, если это так, а затем добавляете свое собственное представление. В противном случае добавьте клетки. Все, что видео делает, это перемещает ячейки вниз на одну и добавляет к cell0 представление, используя код

[cell.contentView addSubview:CustomView];

Это все, что вам нужно, чтобы добавить туда свое представление.

...