UISearchBar 未设置为 UITableView.tableHeaderView
Posted
技术标签:
【中文标题】UISearchBar 未设置为 UITableView.tableHeaderView【英文标题】:UISearchBar not being set to UITableView.tableHeaderView 【发布时间】:2012-06-22 22:18:58 【问题描述】:我无法以编程方式为我的 UITableView 创建 UISearchBar 和 UISearchDisplayController。我已经设置了我的 UISearchBar 和 UISearchDisplayController,然后将 self.tableview.tableHeaderView 设置为 self.searchBar。 tableHeaderView 仍然为 NULL,但 searchBar 和 searchDisplayController 不是。如何让 UISearchBar 不为空并出现在表头中?
这是我设置的:
- (void)viewDidLoad
[super viewDidLoad];
/*other things here*/
//Search Bar
self.searchedDancerData = [[NSMutableArray alloc] init];
self.searchBar = [[UISearchBar alloc] init];
self.searchBar.delegate = self;
[self.searchBar sizeToFit];
self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
[self.tableView setTableHeaderView:self.searchBar];
self.tableView.tableHeaderView.frame = CGRectMake(0, 0, tableView.frame.size.width, 44);
self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
[self.searchDisplayController setDelegate:self];
[self.searchDisplayController setSearchResultsDataSource:self];
[self.tableView reloadData];
NSLog(@"%@", self.tableView.tableHeaderView); //Returns NULL
- (void)viewWillAppear:(BOOL)animated
/*other things*/
//set Content offest
[self.tableView setContentOffset:CGPointMake(0, 44)];
#pragma mark UISearchDisplayControllerDelegate
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
[self.searchedDancerData removeAllObjects];
for (NSDictionary *dancer in self.dancerData)
NSRange range = [[dancer objectForKey:@"Name"] rangeOfString:searchString options:NSCaseInsensitiveSearch];
if (range.location != NSNotFound)
[self.searchedDancerData addObject:[dancer copy]];
[self.searchedDancerData sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
return YES;
- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
[self.searchDisplayController.searchResultsTableView setDelegate:self];
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
[self.tableView setContentOffset:CGPointMake(0, 44) animated:YES];
-(void)searchBar:(id)sender
[self.searchDisplayController setActive:YES animated:YES];
我所有的 UITableViewDelegate 方法都包括这个来填充搜索表:
if (self.searchDisplayController.searchResultsTableView == theTableView)
return something;
else
return somethingElse
我觉得我已经正确设置了这个,请有人帮助我。
【问题讨论】:
可以试试设置uisearchbar的frame吗? 不,没用。我也尝试在导航栏上添加一个搜索按钮,当我点击它时,searchDisplayController 工作,但 searchBar 仍然没有出现。 【参考方案1】:尝试在 tableView 的标题视图中将 searchBar 设置为 UISearchDisplayController 的 SearchBar。
[self.tableView setTableHeaderView:self.searchDisplayController.searchBar];
【讨论】:
以上是关于UISearchBar 未设置为 UITableView.tableHeaderView的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式为 UITableView 和 UISearchBar 设置 NSLayoutConstraints