Как реализовать панель поиска, которая всегда остается на вершине, используя UISearchDisplayController в iPhone SDK 3.0 - PullRequest
2 голосов
/ 31 июля 2009

iPhone SDK 3.0 имеет этот удобный новый класс «UISearchDisplayController», который позволяет легко создавать панель поиска, обрабатывая весь пользовательский ввод и отображая результаты поиска.

Я использую его для своего нового приложения, но есть одна вещь, которую я хотел бы изменить:

По умолчанию панель поиска должна располагаться в верхней части UITableView, в котором отображаются результаты поиска. Поэтому при прокрутке списка результатов строка поиска исчезает.

Чего я хотел бы добиться, так это чтобы панель поиска всегда была сверху, а при прокрутке TableView панель поиска должна оставаться там, где она есть. (Причина этого: иногда в моем приложении много результатов поиска, поэтому иногда пользователю приходится прокручивать страницу вниз, и когда он понимает, что ему нужно изменить строку поиска, я не хочу заставлять его прокрутите весь путь назад)

Что я уже сделал, так это добавил панель поиска в представление UINavigationController, которое является «родительским представлением» моего табличного представления, вместо того, чтобы добавлять его непосредственно в табличное представление:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

searchBar = [[UISearchBar alloc] init];
searchBar.delegate = self;

[searchBar sizeToFit];
CGFloat searchBarHeight = [searchBar frame].size.height;
CGRect mainViewBounds = delegate.navController.view.bounds;
[searchBar setFrame:CGRectMake(CGRectGetMinX(mainViewBounds),
                             CGRectGetMinY(mainViewBounds) + 20,
                             CGRectGetWidth(mainViewBounds),
                             searchBarHeight)];
searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;

[delegate.navController.view addSubview: searchBar];

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self];
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;

... но здесь моя проблема в том, что табличное представление остается за панелью поиска, и всегда есть первая TableViewCell результатов поиска, которая скрыта за моей панелью поиска.

Есть ли способ изменить размер UITableView моего UITableViewController навсегда, чтобы он начинался прямо под строкой поиска?

И есть еще одна проблема: каждый раз, когда я прикасаюсь к панели поиска, UISearchDisplayController автоматически скрывает панель навигации и изменяет размер UITableView (он расширяется вверх), поэтому я думаю, что в этот момент у UISearchDisplayController возникнет большая проблема с моим Настраиваемый размер TableView ...

Большое спасибо за любую помощь !!

Ответы [ 4 ]

2 голосов
/ 31 июля 2009

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

1 голос
/ 01 августа 2009

Мое общее решение для размещения битов на странице, которые я не хочу прокручивать, - это иметь UITableView внутри другого представления. Это внешнее представление содержит две вещи - полосу в верхней части и таблицу чуть короче полной страницы под ней.

0 голосов
/ 10 марта 2010

Поместите этот код в ваш TableViewController:

self.tableView.frame = CGRectMake(0,searchDisplayController?.searchBar.bounds.size.height,320,480);
0 голосов
/ 26 августа 2009

@ интерфейс:

UISearchDisplayController < UISearchBarDelegate > *searchDisplayController;

@ реализация:

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self];

searchDisplayController.delegate = self;
searchBar.delegate = searchDisplayController;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;
...