我有一个UITableViewController,我想在顶部添加一个UISearchBarController,因此它使用不同的表视图(而不是UITableViewController的表视图)进行搜索。
如何通过代码而不是IB来初始化它?
@interface mySearchController : UITableViewController <UISearchDisplayDelegate, UISearchBarDelegate>
@property (nonatomic, retain) UISearchDisplayController *aSearchBarController;
@property (nonatomic, retain) UISearchBar *aSearchBar;
@end
- (id)init {
if ((self = [super init])) {
UISearchBar *tempSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 0)];
self.aSearchBar = tempSearchBar;
self.aSearchBar.delegate = self;
[self.aSearchBar sizeToFit];
self.tableView.tableHeaderView = self.aSearchBar;
[self.aSearchBar release];
UISearchDisplayController *tempSearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:aSearchBar contentsController:self];
self.searchDisplayController = tempSearchDisplayController;
self.searchDisplayController.delegate = self;
self.searchDisplayController.searchResultsDataSource = self;
self.searchDisplayController.searchResultsDelegate = self;
}
return self;
}
- (id)initWithStyle:(UITableViewStyle)style {
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
// Custom initialization.
}
return self;
}
答案 0 :(得分:3)
粗略地看一眼UISearchDisplayController Class Reference
会回答你的问题。
“通常,您从视图初始化搜索显示控制器 控制器(通常是UITableViewController的一个实例) 显示列表。要以编程方式执行配置,请为搜索显示控制器的视图控制器和搜索结果数据源和委托设置
self
。“
所以看起来应该是这样的:
searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;
如果您遵循此模式,那么在表视图数据源和委托方法中,您可以检查方法的表视图参数,以确定发送消息的表视图:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == self.tableView)
{
return ...;
}
// If necessary (if self is the data source for other table views),
// check whether tableView is searchController.searchResultsTableView.
return ...;
}
答案 1 :(得分:0)
你应该查看here。
已经提出并回答了这个问题。我希望这会有所帮助。