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 有很大的问题...
非常感谢您的帮助!!