2

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,它隐藏在我的搜索栏后面。

有没有办法永久调整我的 UITableViewController 的 UITableView 大小,以便它在搜索栏下方开始?

还有另一个问题:每次我触摸搜索栏时,UISearchDisplayController 都会自动隐藏导航栏并调整 UITableView 的大小(它会扩展到顶部),所以我认为此时 UISearchDisplayController 将与我的自定义大小的 TableView 有很大的问题...

非常感谢您的帮助!!

4

4 回答 4

2

我没有想到的解决方案 - 但我会说,用户只需点击屏幕顶部并将表格缩放到顶部(更改如果有错误,请搜索词条)。

于 2009-07-31T19:13:44.250 回答
1

我不想滚动页面上的位的一般解决方案是将 UITableView放在另一个视图中。该外部视图包含两件事 - 顶部的一个栏,以及它下方的一个略短于整页的表格。

于 2009-07-31T20:48:25.993 回答
0

@界面:

UISearchDisplayController < UISearchBarDelegate > *searchDisplayController;

@执行:

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

searchDisplayController.delegate = self;
searchBar.delegate = searchDisplayController;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;
于 2009-08-26T14:40:05.057 回答
0

将此代码放在您的 TableViewController 中:

self.tableView.frame = CGRectMake(0,searchDisplayController?.searchBar.bounds.size.height,320,480);
于 2010-03-10T11:44:22.337 回答