2014-01-20 70 views
2

我正在努力與UISearchDisplayController,並希望有人能幫助我。UISearchDisplayController和setDisplaysSearchBarInNavigationBar

所以基本上我有一個UINavigationBar其中有一個「搜索」按鈕。當有人點擊「搜索」UISearchDisplayController應該積極和UISearchBar應該出現在UINavigationBar內。在SearchBar旁邊,我實現了一個「取消」按鈕,取消激活SearchDisplayController並將UINavigationBar重置爲「搜索」按鈕的標準。

Default UINavigationBar

我的第一個問題是我的SearchBar和結果的表或灰色覆蓋而SearchDisplayController是活性之間的差距。

SearchBar activated

第二個問題是,我不能攻取消後重置我rightBarButtonItem爲默認的圖標(放大鏡)。即使當我嘗試設置[self.navigationItem setRightBarButtonItem:nil];時,它也不會發生任何事情,它只是保留在「取消」按鈕中。

after clicking Cancel

這是我實現:(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]; 
} 

回答

1

好,我想出了這兩個問題的解決方案。

由於[self.searchController setDisplaysSearchBarInNavigationBar:YES];預期導航欄是半透明的,所以我通過在btnSearchClicked上啓用半透明並取消激活它而解決了差距。

在訪問setRightBarButtonItem屬性之前,通過在cancelEditing中停用setDisplaysSearchBarInNavigationBar解決了該按鈕的問題。也許setDisplaysSearchBarInNavigationBar -Option創建一個新的NavigationBar,它不響應self.navigationItem。

相關問題