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的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像设置为 UISearchBar 的范围栏项目?

无法为 UISearchBar 的框架或边界设置动画

以编程方式为 UITableView 和 UISearchBar 设置 NSLayoutConstraints

UISearchBar 设置为 titleView 在 push segue 上的行为很奇怪

UISearchBar 移动到屏幕顶部时未收到触摸

UISearchBar 在 UTableViewHeader 中未正确显示