2012-11-02 13 views
1

我試圖將UIsearchBar添加到我的導航控制器。我也希望使用UISearchBar的取消按鈕。在UIBarButtonItem UIView中的UISearchBar不能正常工作

UISearchBar* searchBar = [[UISearchBar alloc] init]; 
searchBar.frame = CGRectMake(0, 0, 300, searchBar.frame.size.height); 
searchBar.translucent = NO; 
searchBar.barStyle = UIBarStyleBlack; 
searchBar.delegate = self; 
UIView* myView = [[UIView alloc] initWithFrame:searchBar.frame]; 
[myView addSubview:searchBar]; 
UIBarButtonItem* sbItem = [[UIBarButtonItem alloc] initWithCustomView:myView];  
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:chart,sbItem,nil]]; 

搜索條不活動的麻煩。它出現在導航控制器中。但是當我點擊它時,它不會以任何方式響應。如果我顯示取消按鈕它出現,但也不可點擊。

如果我沒有在UIView中包裝UIsearchBar,它可以正常工作,除非它不想讓我看到取消按鈕。

UPD 如果我叫

[searchBar becomeFirstResponder] 

它進入到編輯模式,並顯示了我一個取消按鈕和鍵盤,但看起來像圖,其中,搜索欄包裹的改變它幀PARAMS和從10px的下降其原來的外觀。而從trnsparent改變其背景blackopaque

看起來像某種巫術的......如此簡單的動作需要這麼多時間......

回答

2

我想你已經在搜索欄架誤會,你把搜索欄高度searchBar.frame.size.height,但當時沒有高度,只要改變它想:

UISearchBar* searchBar = [[UISearchBar alloc] init]; 
searchBar.frame = CGRectMake(0, 0, 300, 40); 
searchBar.translucent = NO; 
searchBar.barStyle = UIBarStyleBlack; 
searchBar.delegate = self; 
UIView* myView = [[UIView alloc] initWithFrame:searchBar.frame]; 
[myView addSubview:searchBar]; 
UIBarButtonItem* sbItem = [[UIBarButtonItem alloc] initWithCustomView:myView];  
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:chart,sbItem,nil]]; 

我很抱歉,我不知道該圖是這裏的東西,希望它是你在找什麼。

+0

謝謝你的想法。但不是。這部分是好的。搜索欄呈現它必須呈現的位置,所以它的框架看起來不錯。只有在成爲第一響應者之後纔會發生變化。搜索欄處於非活動狀態的主要問題。當我點擊它時,它不會以任何方式迴應。 Chart只是另一個UIBarButtonItem元素,它工作正常。 –

+0

你有這樣的測試嗎? – iSpark

+0

是的,我測試。但這並不是一回事。我目前只看到一種解決方案 - 在視圖控制器出現時將搜索欄設置爲第一響應者,然後變爲活動狀態。然後,正確的包裝視圖框架及其背景。不優雅,但它應該工作。今天會測試它。 –