为什么UISearchBar即使在被设置为第一响应者之后也没有获得焦点?

zyx*_*xel 6 objective-c uisearchbar becomefirstresponder ios

当UIViewController第二次被推送到导航控制器时,为什么UISearchBar没有获得Focus并且键盘没有出现?似乎整个视图中的任何元素都没有焦点.

我的用例:我有2个视图控制器:A和B.转换是A-> B. A,B被推送到导航控制器.

  1. 当我第一次显示B 时,焦点设置为搜索栏并且键盘出现.OK.
  2. 然后我回到A.再次从A-> B.现在第二次没有焦点键盘不会出现.这是错误的.

我的代码:在B UIViewController上创建了与搜索栏的IBOutlet连接:

@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;
Run Code Online (Sandbox Code Playgroud)

mySearchBar的代表也已设置.我在viewDidAppear方法中将焦点放在B UIViewController中的搜索栏上:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];   
    [self performSelector:@selector(setCorrectFocus) withObject:NULL afterDelay:0.2];
}

-(void) setCorrectFocus {
     [self.mySearchBar becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

控制器之间的转换是通过以下代码手动完成的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
AController *a = [storyboard instantiateViewControllerWithIdentifier:@"A"];
[self.navigationController pushViewController:a animated:NO];
Run Code Online (Sandbox Code Playgroud)

zyx*_*xel 3

经过长时间的搜索,我发现了错误。在情节提要板中的某个位置,留下了名为 mySearchbar 的 UISearchBar 旧连接。我必须纠正的另一件事是该方法

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
Run Code Online (Sandbox Code Playgroud)

返回NO,每次我回到上一个控制器。但YES下次它应该能够将焦点设置在搜索栏上。