10

我讀過關於我如何可以集中一個搜索欄,使當我打開我的搜索視圖鍵盤出現這麼多的解決方案,和所有的都是這樣專注於的UISearchBar,但鍵盤沒有出現

[searchBar becomeFirstResponder]; 
mine is 
[self.searchDisplayController.searchBar becomeFirstResponder]; 
but I tried both. 

現在,我想這一點,我也加入了

[self.searchDisplayController setActive:YES]; 

,因爲我使用的是SearchDisplayController,但到目前爲止最好的結果,我可以有是有搜索欄光標時,用的UITableView覆蓋在它上面,但仍然沒有鍵盤。

如果我運行模擬器,我可以在電腦的鍵盤上鍵入搜索欄,但在iPhone上我什麼都不能做。

如果你想給看一下我的代碼:http://nopaste.info/39fcda4771.html 重點應在viewDidLoad方法再次

感謝執行。

+0

同樣的問題我面臨的是,我的搜索欄是焦點。模擬光標閃爍,但鍵盤未顯示。你有沒有找到解決方案 – 2013-10-29 12:52:31

回答

5

使用UISearchBarDelegate,並宣佈在這樣的頭文件中的搜索欄...

@interface mySearchScreen : UIViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate> { 

UITableView *myTableView; 
NSMutableArray *tableData; 
UISearchBar *sBar;//search bar 

和的loadView

- (void)loadView { 
[super loadView]; 
sBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0,0,320,30)]; 
sBar.delegate = self; 
[self.view addSubview:sBar];  
myTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 31, 300, 400)]; 
myTableView.delegate = self;  
myTableView.dataSource = self; 
[self.view addSubview:myTableView]; 

tableData = [[NSMutableArray alloc]init]; 

}

聲明你的搜索欄,然後使用becomeFirstResponder在您的搜索欄中viewDidAppear

- (void)viewDidAppear:(BOOL)animated { 
//ensure the keyboard comes up from the start 
[sBar becomeFirstResponder];  
[super viewDidAppear:animated]; 

}

+2

不應該[超級viewDidAppear:動畫];先調用[sBar becomeFirstResponder]; – yunas 2012-12-31 10:25:11

+0

適合我,我在'[super viewDidAppear:animated]之後調用主動搜索欄' – c9s 2015-03-10 03:14:55

7

我顯示上textFieldDidBeginEditing搜索欄:(的UITextField *)的TextField委託方法。

鍵盤未顯示。因此,首先resign textField作爲firstResponder。 即

[textField resignFirstResponder]; 

然後調用方法與延遲

[self performSelector:@selector(callSearchBar) withObject:NULL afterDelay:0.2]; 

-(void)callSearchBar{ 
[self.searchDisplayController setActive: YES animated: YES]; 
self.searchDisplayController.searchBar.hidden = NO; 
[self.searchDisplayController.searchBar becomeFirstResponder]; 

}

它的工作原理

+0

這終於爲我工作了!有一個upvote。任何想法爲什麼你必須這樣做'[self.searchDisplayController.searchBar becomeFirstResponder];''而不是'[self.searchBar becomeFirstResponder];'? – scottmrogowski 2013-06-24 03:49:07

+0

這工作正常,但我建議只是在'viewDidAppear:'方法內執行'[self callSearchBar]'。我們無法可靠地知道控制器轉換可能需要多長時間,所以如果您的延遲太短而無法集中搜索條,您可能會遇到一個難看的效果和/或意外的tableview工件。 +1然而:-) – jweyrich 2013-09-27 03:34:13

+0

@scottmrogowski你必須使用'self.searchDisplayController.searchBar',因爲你的'UISearchDisplayController'連接到了你的'UITableViewController',所以你沒有在你的'UITableViewController'中有一個searchBar變量「類,但是你可以通過'UISearchDisplayController'變量得到這個引用。 – 2013-12-17 14:13:55

3

序列此事

[self.searchDisplayController setActive:YES animated:YES]; 
[self.searchDisplayController.searchBar becomeFirstResponder]; 

如果運氣不好,請檢查搜索顯示控制器的代表是否已鏈接。還值得檢查搜索欄的色調。

3

simulator上,確保您單擊Toggle Software Keyboard以使用模擬器的鍵盤,如圖中所示。

enter image description here