专注于UISearchBar但键盘没有出现

Lor*_*nzo 11 uitableview uisearchbar uisearchdisplaycontroller becomefirstresponder

我已经阅读了很多关于如何在我打开搜索视图时关注搜索栏以使键盘出现的解决方案,所有这些都是这样的

[searchBar becomeFirstResponder];
mine is 
[self.searchDisplayController.searchBar becomeFirstResponder];
but I tried both.
Run Code Online (Sandbox Code Playgroud)

现在,我尝试了这个,我还添加了一个

[self.searchDisplayController setActive:YES];
Run Code Online (Sandbox Code Playgroud)

因为我正在使用SearchDisplayController,但到目前为止,我可以拥有的最佳结果是将光标放在搜索栏上,其中包含覆盖的uitableview,但仍然没有键盘.

如果我运行模拟器,我可以使用计算机的键盘在搜索栏上键入,但在iPhone上我无法做任何事情.

如果你想查看我的代码:http://nopaste.info/39fcda4771.html ,焦点应该在viewDidLoad方法中执行

再次感谢.

Man*_*ann 8

我在textFieldDidBeginEditing上显示了搜索栏:(UITextField*)textField委托方法.

键盘没有显示.所以第一次辞去textField作为firstResponder.即

[textField resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)

然后用延迟调用方法

[self performSelector:@selector(callSearchBar) withObject:NULL afterDelay:0.2];
Run Code Online (Sandbox Code Playgroud)

哪里

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

}

有用


And*_*y A 5

使用UISearchBarDelegate并在头文件中声明searchBar,如下所示......

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

UITableView *myTableView;   
NSMutableArray *tableData;
UISearchBar *sBar;//search bar
Run Code Online (Sandbox Code Playgroud)

并在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];
Run Code Online (Sandbox Code Playgroud)

}

然后在viewDidAppear中的搜索栏上使用becomeFirstResponder

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

}

  • 不应该[super viewDidAppear:animated]; 先调用[sBar becomeFirstResponder]; (2认同)