我正在为 UISearchDisplayController 苦苦挣扎,希望有人可以帮助我。
所以基本上我有一个 UINavigationBar ,其中有一个“搜索”按钮。当有人点击“搜索”时,UISearchDisplayController 应该被激活并且 UISearchBar 应该出现在 UINavigationBar 中。在 SearchBar 旁边,我实现了一个“取消”按钮,它可以停用 SearchDisplayController 并将 UINavigationBar 重置为使用“搜索”按钮的标准。
我的第一个问题是 SearchBar 与结果表或灰色覆盖之间的差距,而 SearchDisplayController 处于事件状态。
第二个问题是我无法在点击取消后将我的 rightBarButtonItem 重置为默认图标(放大镜)。即使我尝试设置 [self.navigationItem setRightBarButtonItem:nil]; 也没有发生任何事情,它只是保留在“取消”按钮上。
这是我的实现UI 元素是通过我的 Storyboard添加的)
- (IBAction)btnSearchClickedid)sender {
[self.navigationController.navigationBar addSubview:self.searchController.searchBar];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self actionselector(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];
}
Best Answer-推荐答案 strong>
好的,我想出了解决这两个问题的方法。
由于 [self.searchController setDisplaysSearchBarInNavigationBar:YES]; 期望 NavigationBar 是半透明的,所以出现了差距,所以我通过在 btnSearchClicked 上启用半透明来解决问题 code> 并在取消时将其停用。
通过在访问 setRightBarButtonItem 属性之前停用 cancelEditing 中的 setDisplaysSearchBarInNavigationBar 解决了该按钮的问题。也许 setDisplaysSearchBarInNavigationBar -Option 会创建一个不响应 self.navigationItem 的新 NavigationBar。
关于ios - UISearchDisplayController 和 setDisplaysSearchBarInNavigationBar,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/21234739/
|