为什么UIView控制器第二次推送到导航控制器时UISearchBar没有获得焦点并且键盘没有出现?似乎整个视图中没有一个元素有重点。
我的用例:我有 2 个视图控制器:A 和 B.过渡是 A->B。A、B被推送到导航控制器。
- 当我第一次显示 B 时,焦点设置为搜索栏,并出现键盘。OK。
- 然后我回到A。再次来自 A->B。现在第二次没有焦点,键盘也没有出现。这是错误的。
我的代码:在B UIViewController IBOutlet上,创建了与搜索栏的连接:
@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;
还设置了 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];
}
控制器之间的转换是在代码中手动完成的,如下所示:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
AController *a = [storyboard instantiateViewControllerWithIdentifier:@"A"];
[self.navigationController pushViewController:a animated:NO];
试试这个
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setCorrectFocus];
}
-(void)setCorrectFocus
{
[self.mySearchBar becomeFirstResponder];
}
经过长时间的搜索,我发现了错误。在故事板的某个地方,UISearchBar的旧连接被保留了,名称为mySearchbar。我必须纠正的另一件事是该方法
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
返回NO
,每次我回到以前的控制器。但它应该返回YES
以便下次能够在搜索栏上设置焦点。
正在努力解决相同的问题 - 在 UITextView 的键盘附件中有一个 UISearchBar,即使在调用[self.searchBar becomeFirstResponder]
后,文本视图仍然接收键盘输入。
这是最终有所帮助的:
[self.searchBar.window makeKeyAndVisible];
显然,键盘配件是与UITextField不同的UIWindow的一部分。
注意:要继续在文本视图中键入内容,您应该调用类似 [self.textView.window makeKeyAndVisible];
...
尝试过添加self.mySearchBar.delegate = self;
你应该在你的属性中使用强
@property (strong, nonatomic) IBOutlet UISearchBar *mySearchBar;
始终为您的IBOutlet设置强大的财产。当你从navigationController弹出B时,mySearchBar已经释放,所以你推回B,[self.mySearchBar be成为FirstResponder]不起作用。