我在和UISearchDisplayController做斗争,希望有人能帮我解决问题。
基本上,我有一个UINavigationBar,里面有一个“搜索”-Button。当有人点击“搜索”时,UISearchDisplayController应该激活,UISearchBar应该出现在UINavigationBar中。在SearchBar旁边,我实现了一个“取消”-Button,它使SearchDisplayController失效,并用"Search"-Button将UINavigationBar重置回它的标准。

我的第一个问题是我的SearchBar和结果表或灰色覆盖之间的差距,而SearchDisplayController是活动的。

第二个问题是,在点击“取消”之后,我无法将rightBarButtonItem重置为默认图标(放大镜)。即使我试图设置[self.navigationItem setRightBarButtonItem:nil];,它也不会发生,它只保留在“取消”按钮中。

下面是我的实现:( UI元素是通过我的故事板添加的)
- (IBAction)btnSearchClicked:(id)sender {
[self.navigationController.navigationBar addSubview:self.searchController.searchBar];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelEditing)];
[self.searchController.searchBar setFrame:CGRectMake(0, 0, 250, 44)];
[self.searchController setDisplaysSearchBarInNavigationBar:YES];
[self.searchController setActive:YES animated:YES];
[self.searchController.searchBar becomeFirstResponder];
}
-(void)cancelEditing
{
[self.navigationItem setRightBarButtonItem:nil];
[self.searchController setActive:NO animated:YES];
[self.searchController.searchBar removeFromSuperview];
}发布于 2014-01-20 15:07:29
好的,我想出了两个问题的解决方案。
这一差距之所以出现,是因为[self.searchController setDisplaysSearchBarInNavigationBar:YES];预期NavigationBar是半透明的,所以我只是在btnSearchClicked上启用半透明,并在cancel上使其失效。
在访问setDisplaysSearchBarInNavigationBar属性之前,通过在cancelEditing中禁用setRightBarButtonItem来解决按钮的问题。也许setDisplaysSearchBarInNavigationBar-Option创建了一个不响应self.navigationItem的新NavigationBar。
https://stackoverflow.com/questions/21234739
复制相似问题